Start · Sprachen · PHP · Referenz · restore_error_handler

restore_error_handler

Funktion

Stellt die zuvor aktive Fehlerbehandlungsfunktion wieder her, die vor dem letzten Aufruf von <code>set_error_handler()</code> aktiv war.

seit PHP 4.0.1 Kategorie: error

Signatur

restore_error_handler(): true

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

Typ
true
Beschreibung
Gibt stets 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);
[Eigener Handler] Fehler 512: Ein Testfehler Warning: Weiterer Testfehler in /pfad/zu/skript.php on line 17

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";
Fehler abgefangen: Datei konnte nicht gelesen werden. Fehler-Handler erfolgreich wiederhergestellt.

// 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.