問題:
儘管set_error_handler() 函數對於捕獲錯誤有效PHP錯誤,它無法處理致命錯誤,例如呼叫不存在的函數。這使得開發人員尋找替代方法來捕獲這些嚴重錯誤。
解:
PHP 5.2 提供了 register_shutdown_function() 函數,可以捕捉致命錯誤。以下是遇到此類錯誤時發送錯誤電子郵件的實作:
register_shutdown_function("fatal_handler"); function fatal_handler() { $error = error_get_last(); // Obtain last error if ($error !== NULL) { $errno = $error["type"]; $errfile = $error["file"]; $errline = $error["line"]; $errstr = $error["message"]; error_mail(format_error($errno, $errstr, $errfile, $errline)); } }
支援函數:
定義必要的支援函數,例如 format_error 和 error_mail。 format_error 函數可以以表格的形式傳回錯誤訊息:
function format_error($errno, $errstr, $errfile, $errline) { $trace = print_r(debug_backtrace(false), true); $content = <<<HTML <table> <thead><th>Item</th><th>Description</th></thead> <tbody> <tr><th>Error</th><td><pre class="brush:php;toolbar:false">$errstr
$errno
$trace
利用 Swift Mailer 函式庫實作 error_mail 函式。
其他資源:
以上是如何使用 `register_shutdown_function()` 擷取並處理致命 PHP 錯誤 (E_ERROR)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!