Signatur
Beschreibung
libxml_use_internal_errors() steuert, wie libxml-basierte PHP-Erweiterungen (z. B. DOMDocument, SimpleXML oder XMLReader) mit Parsing-Fehlern umgehen. Standardmäßig gibt libxml Fehler direkt aus oder wirft Warnungen. Wenn diese Funktion mit true aufgerufen wird, werden diese Fehler intern gepuffert und können später mit libxml_get_errors() ausgelesen werden.
Das ist besonders nützlich beim Parsen von HTML-Dokumenten aus externen Quellen (z. B. Web-Scraping oder E-Mail-Verarbeitung), die häufig nicht valides HTML enthalten. Ohne interne Fehlerbehandlung würde PHP für jede Abweichung vom Standard eine Warnung ausgeben, was in der Produktion problematisch ist.
Nach dem Verarbeiten der Fehler sollte der interne Fehlerpuffer mit libxml_clear_errors() geleert werden, um Speicher freizugeben und zu verhindern, dass Fehler aus früheren Operationen versehentlich mitgelesen werden.
Wird die Funktion ohne Argument oder mit null aufgerufen, gibt sie den aktuellen Status zurück, ohne ihn zu verändern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $use_errors | bool|null | null | Wenn true, werden libxml-Fehler intern gepuffert statt ausgegeben. Wenn false, wird die Standard-Fehlerausgabe wiederhergestellt. Bei null (ab PHP 8.0) oder ohne Argument wird der aktuelle Status abgefragt, ohne ihn zu ändern. |
Rückgabewert
true, wenn interne Fehlerbehandlung zuvor aktiv war, andernfalls false.Beispiele
Fehlerbehandlung beim Parsen von fehlerhaftem HTML
<?php
// Interne Fehlerbehandlung aktivieren
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('<html><boedy>Ungültiges HTML</boedy></html>');
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo "Zeile {$error->line}: " . trim($error->message) . PHP_EOL;
}
// Fehlerpuffer leeren
libxml_clear_errors();
// Fehlerbehandlung wieder deaktivieren (optional)
libxml_use_internal_errors(false);
Aktuellen Status abfragen ohne Änderung
<?php
// Zunächst aktivieren
libxml_use_internal_errors(true);
// Status abfragen (ab PHP 8.0: null übergeben, davor: kein Argument)
$currentStatus = libxml_use_internal_errors(null);
echo $currentStatus ? 'Intern aktiv' : 'Intern inaktiv';
// Achtung: In PHP < 8.0 ändert der Aufruf ohne Argument den Wert auf false!
// Dort den Rückgabewert nutzen und danach wieder aktivieren.
Valides Prüfen eines XML-Dokuments ohne Ausgabe
<?php
libxml_use_internal_errors(true);
$xml = simplexml_load_string('<root><item>Test</item><unclosed></root>');
if ($xml === false) {
echo "XML enthält Fehler:" . PHP_EOL;
foreach (libxml_get_errors() as $error) {
echo ' [' . $error->level . '] ' . trim($error->message) . PHP_EOL;
}
libxml_clear_errors();
} else {
echo "XML erfolgreich geladen." . PHP_EOL;
}
// Wichtig · Fallstricke
Achtung bei PHP < 8.0: Ein Aufruf von libxml_use_internal_errors() ohne Argument setzt den Wert auf false zurück (da der Parameter standardmäßig false war). Wenn Sie den Status nur abfragen möchten, müssen Sie den Rückgabewert speichern und anschließend libxml_use_internal_errors(true) erneut aufrufen. Erst ab PHP 8.0 ist der Parameter nullable (?bool).
Fehlerpuffer leeren: Vergessen Sie nicht, libxml_clear_errors() nach der Fehlerverarbeitung aufzurufen. Andernfalls sammeln sich Fehler aus verschiedenen Operationen an und können zu unerwarteten Ergebnissen führen.
Geltungsbereich: Die Einstellung ist global für den gesamten PHP-Prozess. In lang laufenden Anwendungen (z. B. mit Symfony, Laravel) sollte der vorherige Zustand nach der Operation wiederhergestellt werden.