Signatur
Beschreibung
restore_error_handler() macht den letzten Aufruf von set_error_handler() rückgängig und reaktiviert die davor gültige Fehlerbehandlungsfunktion. PHP verwaltet intern einen Stack von Fehler-Handlern, sodass mehrere verschachtelte Handler problemlos gesetzt und wieder entfernt werden können.
Diese Funktion ist besonders nützlich, wenn ein temporärer Fehler-Handler für einen begrenzten Codeabschnitt gesetzt wurde — beispielsweise um Fehler bei einem unsicheren API-Aufruf oder bei der Dateiverarbeitung gezielt abzufangen — und anschließend wieder zum vorherigen Verhalten zurückgekehrt werden soll. Auf diese Weise bleibt die globale Fehlerbehandlung konsistent.
Wird restore_error_handler() aufgerufen, ohne dass zuvor set_error_handler() gesetzt wurde, wird der interne PHP-Standard-Fehler-Handler wiederhergestellt. Die Funktion gibt stets true zurück und erzeugt keinen Fehler, auch wenn kein benutzerdefinierter Handler aktiv war.
Ein typisches Muster ist das Setzen eines temporären Handlers mit set_error_handler(), das Ausführen des kritischen Codes, und das anschließende Aufrufen von restore_error_handler() — idealerweise in einem finally-Block, um die Wiederherstellung auch im Fehlerfall sicherzustellen.
Rückgabewert
true zurück. Seit PHP 8.0 ist der Rückgabetyp explizit als true deklariert.Beispiele
Temporären Fehler-Handler für einen Codeabschnitt verwenden
<?php
function meinFehlerHandler(int $errno, string $errstr): bool {
echo "[Eigener Handler] Fehler $errno: $errstr\n";
return true; // Standardbehandlung unterdrücken
}
// Eigenen Handler setzen
set_error_handler('meinFehlerHandler');
// Fehler wird vom eigenen Handler abgefangen
trigger_error('Ein Testfehler', E_USER_WARNING);
// Vorherigen Handler wiederherstellen
restore_error_handler();
// Fehler wird nun wieder vom Standard-Handler behandelt
trigger_error('Weiterer Testfehler', E_USER_WARNING);
Sicherer Einsatz mit finally-Block
<?php
function stiller_handler(int $errno, string $errstr): bool {
// Fehler protokollieren, aber nicht ausgeben
error_log("Unterdrückter Fehler [$errno]: $errstr");
return true;
}
set_error_handler('stiller_handler');
try {
// Unsicherer Aufruf, der ggf. einen E_WARNING erzeugt
$result = file_get_contents('/nicht/vorhanden/datei.txt');
if ($result === false) {
throw new RuntimeException('Datei konnte nicht gelesen werden.');
}
} catch (RuntimeException $e) {
echo 'Fehler abgefangen: ' . $e->getMessage() . "\n";
} finally {
// Immer wiederherstellen, egal ob Fehler oder nicht
restore_error_handler();
}
echo "Fehler-Handler erfolgreich wiederhergestellt.\n";
// Wichtig · Fallstricke
Verschachtelung: PHP verwaltet einen Stack von Fehler-Handlern. Jeder Aufruf von set_error_handler() legt einen neuen Handler auf den Stack, und jeder Aufruf von restore_error_handler() entfernt den obersten. Bei mehrfach verschachtelten Handlern muss restore_error_handler() entsprechend oft aufgerufen werden.
finally-Block: Es empfiehlt sich, restore_error_handler() stets in einem finally-Block zu platzieren, damit der Handler auch bei Ausnahmen oder vorzeitigem Abbruch korrekt zurückgesetzt wird.
Kein Fehler bei fehlendem Handler: Wird die Funktion aufgerufen, ohne dass zuvor ein benutzerdefinierter Handler gesetzt wurde, kehrt PHP einfach zum internen Standard-Handler zurück — es wird kein Fehler ausgelöst.