PHP捕获FATAL级别错误
官方参考资料
官方网站 set_error_handler register_shutdown_function如何完美捕获所有错误
set_error_handler可以用于捕获大多数的错误类型,当碰到FATAL级别的错误时,由于PHP直接终止运行了,所以无法触发set_error_handler设置的回调函数。这时候我们就需要使用register_shutdown_function来设置程序终止的回调函数。需要注意的是register_shutdown_function设置的回调是在程序运行终止后执行的,无论过程中是否出现错误都会执行。所以在这个回调中我们还需要先判断是否产生了错误,如果有产生错误我们再把它记录到日志中。具体可以参考下面的代码。
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);
}