首頁 > 後端開發 > php教程 > 如何使用 `register_shutdown_function()` 擷取並處理致命 PHP 錯誤 (E_ERROR)?

如何使用 `register_shutdown_function()` 擷取並處理致命 PHP 錯誤 (E_ERROR)?

DDD
發布: 2024-12-29 08:02:17
原創
174 人瀏覽過

How Can I Catch and Handle Fatal PHP Errors (E_ERROR) Using `register_shutdown_function()`?

捕獲致命(E_ERROR) PHP 錯誤

問題:

儘管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
$errno
File$errfile Line$errline Trace
$trace
HTML; return $content; }
登入後複製

利用 Swift Mailer 函式庫實作 error_mail 函式。

其他資源:

  • [$php_errormsg](https://www.php.net/manual/en/reserved.variables.err ormsg.php)
  • [預先定義常數](https://www.php.net/manual/en/language.constants.predefined.php)

以上是如何使用 `register_shutdown_function()` 擷取並處理致命 PHP 錯誤 (E_ERROR)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板