Signatur
Beschreibung
error_get_last() liefert ein assoziatives Array mit den Schlüsseln type, message, file und line, die den Typ, die Nachricht, die Datei und die Zeilennummer des zuletzt aufgetretenen Fehlers beschreiben. Ist noch kein Fehler aufgetreten, gibt die Funktion null zurück.
Die Funktion ist besonders nützlich in Kombination mit Operatoren, die Fehler unterdrücken (z. B. dem @-Operator), da in solchen Fällen ein regulärer Error-Handler nicht aufgerufen wird. So lässt sich nachträglich prüfen, ob eine Operation fehlgeschlagen ist und was genau schiefgelaufen ist.
Typische Anwendungsfälle sind das Prüfen, ob eine Datei- oder Netzwerkoperation intern einen Fehler erzeugt hat, ohne dass eine Exception geworfen wurde, sowie das Logging oder Debugging in shutdown-Funktionen, die mit register_shutdown_function() registriert wurden. In solchen Shutdown-Callbacks lässt sich mit error_get_last() der letzte fatale Fehler abfangen, der anderweitig nicht mehr behandelbar wäre.
Zu beachten ist, dass der interne Fehlerpuffer durch error_clear_last() (seit PHP 7.0) zurückgesetzt werden kann. So lässt sich gezielt sicherstellen, dass error_get_last() nur Fehler zurückliefert, die nach dem Reset aufgetreten sind.
Rückgabewert
type (int, entspricht einer E_*-Konstante), message (string), file (string) und line (int). Gibt null zurück, wenn bisher kein Fehler aufgetreten ist oder der Fehlerpuffer mit error_clear_last() zurückgesetzt wurde.Beispiele
Fehler nach unterdrückter Operation abfragen
<?php
// Fehlerpuffer zurücksetzen (PHP 7.0+)
error_clear_last();
// Datei öffnen, Fehler mit @ unterdrücken
$handle = @fopen('/nicht/vorhanden/datei.txt', 'r');
if ($handle === false) {
$error = error_get_last();
if ($error !== null) {
echo 'Fehler-Typ: ' . $error['type'] . PHP_EOL;
echo 'Nachricht: ' . $error['message'] . PHP_EOL;
echo 'Datei: ' . $error['file'] . PHP_EOL;
echo 'Zeile: ' . $error['line'] . PHP_EOL;
}
}
Fatale Fehler im Shutdown-Handler abfangen
<?php
register_shutdown_function(function () {
$error = error_get_last();
if ($error !== null && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
// Fatalen Fehler loggen
file_put_contents(
'/var/log/php_fatal.log',
date('Y-m-d H:i:s') . ' FATAL: ' . $error['message']
. ' in ' . $error['file'] . ':' . $error['line'] . PHP_EOL,
FILE_APPEND
);
echo 'Ein schwerwiegender Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.';
}
});
// Simulierter fataler Fehler (z. B. durch undefinierte Klasse)
// new NichtVorhandeneKlasse();
// Wichtig · Fallstricke
Reihenfolge beachten: error_get_last() liefert stets den letzten Fehler — liegt zwischen zwei Fehlern kein error_clear_last()-Aufruf, gehen ältere Fehler verloren. Es empfiehlt sich daher, vor einer zu prüfenden Operation immer error_clear_last() aufzurufen.
Kein Ersatz für einen Error-Handler: Für eine vollständige Fehlerbehandlung sollte set_error_handler() verwendet werden. error_get_last() eignet sich nur für gezielte punktuelle Abfragen.
Fatale Fehler: Der Shutdown-Handler ist der einzige Ort, an dem fatale Fehler (wie E_ERROR) noch behandelt werden können — hier ist error_get_last() ein unverzichtbares Werkzeug.