Start · Sprachen · PHP · Referenz · libxml_get_last_error

libxml_get_last_error

Funktion

Gibt den zuletzt von libxml aufgezeichneten Fehler als <code>LibXMLError</code>-Objekt zurück oder <code>false</code>, wenn kein Fehler vorliegt.

seit PHP 5.1.0 Kategorie: xml

Signatur

libxml_get_last_error(): LibXMLError|false

Beschreibung

libxml_get_last_error() liefert den jüngsten Fehler, der von der libxml-Bibliothek beim Verarbeiten von XML- oder HTML-Dokumenten erzeugt wurde. Der Rückgabewert ist ein LibXMLError-Objekt mit den Eigenschaften level, code, column, message, file und line.

Damit die Funktion überhaupt etwas zurückgeben kann, muss die interne Fehlerbehandlung von libxml zuvor mit libxml_use_internal_errors(true) aktiviert werden. Ohne diese Aktivierung werden Fehler direkt als PHP-Warnungen ausgegeben und nicht intern gespeichert.

Die Funktion ist besonders nützlich, wenn man nach dem Laden eines XML-Dokuments den letzten aufgetretenen Fehler gezielt auswerten möchte, ohne alle aufgelaufenen Fehler mit libxml_get_errors() durchzugehen. Nach der Auswertung sollte der Fehlerpuffer mit libxml_clear_errors() geleert werden, um Verwirrungen bei nachfolgenden Operationen zu vermeiden.

Der Fehler-Level im zurückgegebenen Objekt entspricht einer der Konstanten LIBXML_ERR_WARNING, LIBXML_ERR_ERROR oder LIBXML_ERR_FATAL, was eine differenzierte Reaktion auf unterschiedlich schwerwiegende Probleme erlaubt.

Rückgabewert

Typ
LibXMLError|false
Beschreibung
Gibt ein LibXMLError-Objekt zurück, das den zuletzt aufgezeichneten libxml-Fehler beschreibt. Falls kein Fehler vorliegt oder die interne Fehlerbehandlung nicht aktiviert ist, wird false zurückgegeben.

Beispiele

Letzten Fehler beim XML-Laden auswerten

<?php
libxml_use_internal_errors(true);

$xml = simplexml_load_string('<root><item>Wert</item></broot>'); // absichtlich fehlerhaft

if ($xml === false) {
    $fehler = libxml_get_last_error();
    if ($fehler !== false) {
        echo 'Fehler-Level : ' . $fehler->level   . PHP_EOL;
        echo 'Fehler-Code  : ' . $fehler->code    . PHP_EOL;
        echo 'Zeile        : ' . $fehler->line     . PHP_EOL;
        echo 'Meldung      : ' . trim($fehler->message) . PHP_EOL;
    }
    libxml_clear_errors();
} else {
    echo 'XML erfolgreich geladen.';
}
Fehler-Level : 3 Fehler-Code : 76 Zeile : 1 Meldung : Opening and ending tag mismatch: item line 1 and broot

Fehler-Level mit Konstanten prüfen

<?php
libxml_use_internal_errors(true);

$dom = new DOMDocument();
$dom->loadHTML('<p>Nicht geschlossen<b>Fett');

$fehler = libxml_get_last_error();
if ($fehler !== false) {
    switch ($fehler->level) {
        case LIBXML_ERR_WARNING:
            echo 'Warnung: '   . trim($fehler->message);
            break;
        case LIBXML_ERR_ERROR:
            echo 'Fehler: '    . trim($fehler->message);
            break;
        case LIBXML_ERR_FATAL:
            echo 'Schwerwiegender Fehler: ' . trim($fehler->message);
            break;
    }
}
libxml_clear_errors();
Warnung: Tag b implicitly closed by p

// Wichtig · Fallstricke

Fehlerpuffer leeren: Nach der Fehlerauswertung immer libxml_clear_errors() aufrufen, damit Fehler aus einer Operation nicht in die nächste überlaufen und zu falschen Diagnosen führen.

Interne Fehlerbehandlung: Ohne vorangegangenes libxml_use_internal_errors(true) gibt libxml_get_last_error() stets false zurück, da libxml Fehler dann nicht intern speichert.

Alle Fehler vs. letzter Fehler: Bei komplexen Dokumenten können mehrere Fehler auftreten. libxml_get_last_error() gibt nur den jüngsten zurück. Für eine vollständige Liste aller Fehler sollte libxml_get_errors() verwendet werden.