[英]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.