Signatur
Beschreibung
libxml_get_errors() liest alle seit dem letzten Aufruf von libxml_clear_errors() (oder seit Programmstart) gesammelten Fehler, Warnungen und Hinweise als Array von LibXMLError-Objekten aus. Jedes Objekt enthält die Eigenschaften level, code, column, message, file und line.
Damit die Funktion nützlich ist, muss die interne Fehlerbehandlung von libxml zuvor mit libxml_use_internal_errors(true) aktiviert werden. Andernfalls werden Fehler direkt als PHP-Warnings ausgegeben und landen nicht im Puffer.
Typische Einsatzgebiete sind das Validieren von XML- oder HTML-Dokumenten mit DOMDocument::loadXML(), DOMDocument::loadHTMLFile() oder SimpleXML-Funktionen, wenn man Fehler strukturiert auswerten oder protokollieren möchte, anstatt sie unkontrolliert auf dem Bildschirm erscheinen zu lassen.
Nach der Auswertung sollte der Puffer mit libxml_clear_errors() geleert werden, damit alte Fehler nachfolgende Prüfungen nicht verfälschen.
Rückgabewert
LibXMLError-Objekten zurück. Jedes Objekt hat die Felder: level (Schweregrad: LIBXML_ERR_WARNING, LIBXML_ERR_ERROR, LIBXML_ERR_FATAL), code (numerischer Fehlercode), message (Fehlermeldung), file (Dateiname oder leer), line (Zeilennummer) und column (Spaltennummer).Beispiele
Fehler beim Laden von fehlerhaftem XML auflisten
<?php
libxml_use_internal_errors(true);
$xml = simplexml_load_string('<root><unclosed></root>');
if ($xml === false) {
echo "XML konnte nicht geparst werden. Fehler:" . PHP_EOL;
foreach (libxml_get_errors() as $error) {
$level = match ($error->level) {
LIBXML_ERR_WARNING => 'Warnung',
LIBXML_ERR_ERROR => 'Fehler',
LIBXML_ERR_FATAL => 'Fataler Fehler',
default => 'Unbekannt',
};
printf(
"[%s] Zeile %d, Spalte %d: %s\n",
$level,
$error->line,
$error->column,
trim($error->message)
);
}
libxml_clear_errors();
} else {
echo "XML erfolgreich geladen." . PHP_EOL;
}
HTML mit DOMDocument laden und Fehler sammeln
<?php
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('<html><body><p>Nicht geschlossen<div>Hier</div></body></html>');
$errors = libxml_get_errors();
if (!empty($errors)) {
echo count($errors) . ' Fehler/Warnungen gefunden:' . PHP_EOL;
foreach ($errors as $error) {
echo '- ' . trim($error->message) . ' (Zeile ' . $error->line . ')' . PHP_EOL;
}
} else {
echo 'Keine Fehler.' . PHP_EOL;
}
libxml_clear_errors();
// Wichtig · Fallstricke
Wichtig: Ohne vorherigen Aufruf von libxml_use_internal_errors(true) bleibt der Puffer stets leer, da Fehler nicht gesammelt, sondern direkt als PHP-Notices/Warnings ausgegeben werden.
Der Fehlerpuffer ist global und wird über mehrere Ladevorgänge hinweg angesammelt. Es empfiehlt sich daher, libxml_clear_errors() stets nach der Auswertung aufzurufen, um Fehler aus unterschiedlichen Parsing-Vorgängen nicht zu vermischen.
Der Schweregrad LIBXML_ERR_FATAL bedeutet, dass das Dokument nicht korrekt verarbeitet werden konnte; LIBXML_ERR_WARNING und LIBXML_ERR_ERROR können je nach Kontext noch ein brauchbares Ergebnis liefern.