我正在尝试使用register_shutdown_function'捕获'PHP致命错误,这样我就可以返回一条干净的错误消息。
在一个简单的PHP文件中,下面的两个测试用例都得到了正确处理,并返回了我的自定义500错误。
register_shutdown_function('handleShutdown');
//Test Case #1
$nullVar = null;
$nullVar->test();
//Test case #2
$uninitialisedVar->test();
function handleShutdown()
{
$error = error_get_last();
if ($error !== NULL)
{
ob_clean();
header('HTTP/1.0 500 Internal Server Error');
echo 'Something bad happened';
}
}
但是,当在控制器内的Symfony 2操作中使用相同的机制时,不再处理测试用例#2:我的处理程序仅在变量之前被初始化时被调用。但是,在这两种情况下,我们都处理相同类型的致命错误(对非对象调用成员方法)。
有人可以帮忙吗?
答案 0 :(得分:1)
在调试模式下,Symfony2调用可能与set_error_handler
冲突的register_shutdown_function
。在生产模式中,它不会发生。