Signatur
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
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 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();
// 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.