当前位置: 首页 > 面试题库 >

使用register_shutdown_function()处理PHP中的致命错误

翁烨霖
2023-03-14
问题内容

根据对此答案的评论,有可能通过关机功能来捕获致命错误,而使用不能捕获该错误set_error_handler()

但是,我无法确定如何确定是由于致命错误还是由于脚本到达末尾而导致关机。

另外,调试回溯函数似乎在关闭函数中已失效,因此对于记录发生致命错误的堆栈跟踪而言,它毫无价值。

所以我的问题是:对致命错误(尤其是未定义的函数调用)做出反应的同时保持创建适当回溯能力的最佳方法是什么?


问题答案:

这对我有用:

function shutdown() {
    $error = error_get_last();
    if ($error['type'] === E_ERROR) {
        // fatal error has occured
    }
}

register_shutdown_function('shutdown');

spl_autoload_register('foo'); 
// throws a LogicException which is not caught, so triggers a E_ERROR

但是,您可能已经知道了,只是为了确保:您无法以任何方式从E_ERROR中恢复。

至于回溯,您不能… :(在大多数致命错误的情况下,尤其是 未定义的函数
错误,您实际上并不需要它。精确定位文件/行所在的位置就足够了。回溯是无关紧要的在这种情况下。



 类似资料:
  • 问题内容: 如何使用 自定义* 错误处理程序处理 解析 和 致命 错误? * 问题答案: 简单答案:不能。参见手册: 用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及在调用set_error_handler()的文件中引发的大多数E_STRICT。 对

  • 本文向大家介绍PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function,包括了PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function的使用技巧和注意事项,需要的朋友参考一下 1、错误类型:PHP致命错误 Error type: PHP Fatal error

  • 我有一个网站,在我的本地主机与xampp完美地工作,但。。。我把它上传到了一些免费的网站(000webhost和hostinger),当我试图打开它时,收到了以下消息: 警告:require(core/libs/smarty/smarty.class.php):无法打开流:在/home/u327900732/public_html/www/index中没有这样的文件或目录。php在线7 致命错误:

  • 我使用Laravel,我试图迁移一些表到我的数据库(phpmyadmin)。它之前给我带来了一些麻烦,所以我删除了数据库中迁移表中的所有行,所以现在它什么都没有了。所以我试图运行'php工匠迁移',我得到以下错误: PHP致命错误:在第301行的 /var/www/loja/vendor/laravel/framework/src/Illuminate/Database/Migrations/Mi

  • 本文向大家介绍浅谈PHP中的错误处理和异常处理,包括了浅谈PHP中的错误处理和异常处理的使用技巧和注意事项,需要的朋友参考一下 错误处理:          1. 语法错误     2. 运行时的错误     3. 逻辑错误   错误报告:                  错误E_ERROR         警告E_WARNING         注意E_NOTICE 开发阶段:开发时输出所有的

  • 我正在尝试通过Tumblr PHP API验证用户身份。 我收到此错误 致命错误:未捕获异常“GuzzleHttp\exception\RequestException”,消息为“cURL error 60:SSL证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)' 当访问建议的站点时,这是错误60的解释 C