首页 > 后端开发 > php教程 > 如何使用 `register_shutdown_function()` 捕获并处理致命 PHP 错误 (E_ERROR)?

如何使用 `register_shutdown_function()` 捕获并处理致命 PHP 错误 (E_ERROR)?

DDD
发布: 2024-12-29 08:02:17
原创
165 人浏览过

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.errormsg.php)
  • [预定义常量](https://www.php.net/manual/en/language.constants.predefined.php)

以上是如何使用 `register_shutdown_function()` 捕获并处理致命 PHP 错误 (E_ERROR)?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板