繁体   English   中英

捕获致命的PHP错误并引发异常

[英]Catching fatal PHP errors and throwing an exception

我们软件的入口点(前端控制器)包装在try catch块中,该块捕获异常,然后包含一个PHP文件以显示友好的错误页面,并通过电子邮件将异常发送给我们。 这可以完美地工作,但是会遗漏仅显示HTTP 500响应的PHP致命错误。 我试图以与异常相同的方式捕获这些错误。

目前,我们在应用程序的入口点中包含以下内容:

try {
    // Register a shutdown handler for fatal errors
    register_shutdown_function(function() {
        $error = error_get_last();

        // Did this request throw an error that wasn't handled?
        if ($error !== null) {
            throw new Exception('PHP fatal error!');
        }
    });

    // ...normal front controller stuff
} catch (Exception $e) {
    // show fancy error screen with debug information
    include 'themes/error/500.php';
}

在这里,我在PHP引发致命错误时引发了异常,希望它可以由常规异常处理过程来处理。 但是,永远不会捕获到异常:

Fatal error: Uncaught exception 'Exception' with message 'PHP fatal error!'

我如何才能在这里实现自己的目标?

您不应该为此使用register_shutdown_function() -这是没有意义的,因为您已经处于退出脚本的阶段。 PHP允许您通过set_error_handler()函数处理错误。

但是请注意,您不能使用该方法来处理致命错误(例如,调用未定义的函数),并且从根本上也可以解析错误:

用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及在调用set_error_handler()的文件中引发的大多数E_STRICT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM