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