PHP fångar FATAL-nivåfel

Officiell referens

Officiell hemsida set_error_handler register_shutdown_function

Hur man fångar alla fel perfekt

set_error_handler kan användas för att fånga de flesta feltyper. När ett FATAL-nivåfel påträffas, eftersom PHP direkt avslutar operationen, kan inte den återuppringningsfunktion som ställts in av set_error_handler utlösas. För närvarande behöver vi använda register_shutdown_function för att ställa in återuppringningsfunktionen för programavslutning. Det bör noteras att återuppringningen som ställts in av register_shutdown_function utförs efter att programmet avslutats, oavsett om det finns ett fel i processen. Så i denna återuppringning måste vi också avgöra om ett fel har inträffat, och om ett fel har inträffat registrerar vi det i loggen. Mer information finns i följande kod.

            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);
}