Start · Sprachen · PHP · Referenz · libxml_clear_errors

libxml_clear_errors

Funktion

Leert den internen libxml-Fehlerpuffer und verwirft alle bisher gesammelten Fehlermeldungen.

seit PHP 5.1.0 Kategorie: xml

Signatur

libxml_clear_errors(): void

Beschreibung

libxml_clear_errors() löscht alle Fehler und Warnungen, die libxml seit dem letzten Aufruf dieser Funktion (oder seit Beginn der Fehlersammlung) intern gespeichert hat. Die Funktion wird typischerweise nach dem Auslesen der Fehler mit libxml_get_errors() aufgerufen, um den Puffer für die nächste XML-/HTML-Verarbeitung zurückzusetzen.

Die Fehlersammlung muss zuvor mit libxml_use_internal_errors(true) aktiviert worden sein, da PHP libxml-Fehler standardmäßig direkt ausgibt, anstatt sie zu sammeln. Ohne interne Fehlerbehandlung hat libxml_clear_errors() keine sichtbare Wirkung.

Ein typischer Arbeitsablauf sieht so aus: Fehlersammlung aktivieren, XML parsen, Fehler mit libxml_get_errors() auslesen und verarbeiten, dann den Puffer mit libxml_clear_errors() bereinigen. Dies verhindert, dass alte Fehler spätere Operationen beeinflussen.

Wird der Puffer nicht regelmäßig geleert, können sich Fehler aus verschiedenen Parse-Vorgängen ansammeln und zu falschen Schlussfolgerungen führen, da libxml_get_errors() dann alle gesammelten Fehler zurückgibt, nicht nur die des letzten Vorgangs.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Fehler nach dem Parsen auslesen und Puffer bereinigen

<?php
// Interne Fehlerbehandlung aktivieren
libxml_use_internal_errors(true);

$xml = simplexml_load_string('<root><unclosed></root>');

if ($xml === false) {
    $fehler = libxml_get_errors();
    foreach ($fehler as $fehlerObjekt) {
        echo 'Fehler: ' . trim($fehlerObjekt->message) . ' (Zeile ' . $fehlerObjekt->line . ')' . PHP_EOL;
    }
    // Puffer leeren, damit der nächste Parse-Vorgang sauber startet
    libxml_clear_errors();
} else {
    echo 'XML erfolgreich geparst.' . PHP_EOL;
    libxml_clear_errors();
}
Fehler: Opening and ending tag mismatch: unclosed line 1 and root (Zeile 1)

Mehrere XML-Dokumente nacheinander verarbeiten

<?php
libxml_use_internal_errors(true);

$dokumente = [
    '<valid><node/></valid>',
    '<invalid><broken></invalid>',
    '<also_valid><item>Text</item></also_valid>',
];

foreach ($dokumente as $index => $xmlString) {
    $doc = new DOMDocument();
    $doc->loadXML($xmlString);

    $fehler = libxml_get_errors();
    if (empty($fehler)) {
        echo "Dokument $index: gültig" . PHP_EOL;
    } else {
        echo "Dokument $index: " . count($fehler) . ' Fehler gefunden' . PHP_EOL;
    }
    // Puffer nach jedem Dokument leeren!
    libxml_clear_errors();
}
Dokument 0: gültig Dokument 1: 1 Fehler gefunden Dokument 2: gültig

// Wichtig · Fallstricke

Wichtig: Wird libxml_clear_errors() zwischen zwei Parse-Vorgängen vergessen, enthält libxml_get_errors() beim zweiten Aufruf auch noch die Fehler des ersten Vorgangs. Dies kann dazu führen, dass ein eigentlich fehlerfreies Dokument fälschlicherweise als fehlerhaft eingestuft wird.

Die Funktion hat nur dann eine Wirkung, wenn die interne Fehlerbehandlung über libxml_use_internal_errors(true) aktiviert wurde. Bei deaktivierter Sammlung werden Fehler direkt ausgegeben und nicht gepuffert.