如
this answer所示,您可以使用register_shutdown_function()注册一个将检查error_get_last()的回调。
您仍然必须管理由违规代码生成的输出,无论是通过@(关闭)运算符还是ini_set(‘display_errors’,false)
ini_set('display_errors', false);
error_reporting(-1);
set_error_handler(function($code, $string, $file, $line){
throw new ErrorException($string, null, $code, $file, $line);
});
register_shutdown_function(function(){
$error = error_get_last();
if(null !== $error)
{
echo 'Caught at shutdown';
}
});
try
{
while(true)
{
$data .= str_repeat('#', PHP_INT_MAX);
}
}
catch(\Exception $exception)
{
echo 'Caught in try/catch';
}
运行时,输出在关闭时捕捉。不幸的是,ErrorException异常对象不被抛出,因为致命错误触发脚本终止,随后仅在关闭函数中捕获。
您可以在关闭函数中检查$ error数组,了解原因的详细信息,并相应地做出响应。一个建议可以是重新发出请求回您的Web应用程序(在不同的地址,或不同的参数当然),并返回捕获的响应。
我建议保持error_reporting()高(值为-1)虽然,并使用(如其他人建议)错误处理其他与set_error_handler()和ErrorException。
本文介绍了一种使用PHP的register_shutdown_function()和error_get_last()来捕获脚本中未被捕获的致命错误的方法。通过设置错误处理器并将异常转换为ErrorException对象,可以在关闭时捕获这些错误。此外还讨论了如何在关闭函数中检查$error数组以获取更多关于引发错误的信息。
9945

被折叠的 条评论
为什么被折叠?



