PHP fängt Fehler auf FATAL-Ebene ab

Offizielle Referenz

Offizielle Website set_error_handler register_shutdown_function

Wie man alle Fehler perfekt abfängt

Mit set_error_handler können die meisten Fehlertypen erfasst werden. Wenn ein Fehler auf FATAL-Ebene auftritt, kann die von set_error_handler festgelegte Rückruffunktion nicht ausgelöst werden, da PHP den Vorgang direkt beendet. Zu diesem Zeitpunkt müssen wir register_shutdown_function verwenden, um die Rückruffunktion für die Programmbeendigung festzulegen. Es ist zu beachten, dass der durch register_shutdown_function gesetzte Rückruf ausgeführt wird, nachdem das Programm beendet wurde, unabhängig davon, ob ein Fehler im Prozess vorliegt. In diesem Rückruf müssen wir also auch feststellen, ob ein Fehler aufgetreten ist, und wenn ein Fehler aufgetreten ist, werden wir ihn im Protokoll aufzeichnen. Einzelheiten finden Sie im folgenden Code.

            set_error_handler('exception_handler');
register_shutdown_function('shutdown_handler');
function exception_handler($err_no, $err_str, $err_file, $err_line)
{
    error_reporting(0);
    // save error log
    // ...
    error_reporting(E_ALL);
}
function shutdown_handler()
{
    $error = error_get_last();
    if (empty($error)) {
        return;
    }
    error_reporting(0);
    // save error log
    // ...
    error_reporting(E_ALL);
}