我正在尝试使用 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:我的处理程序仅在变量之前已初始化时才被调用。但是,在这两种情况下,我们都在处理同一种致命错误(调用非对象的成员方法)。
有人可以帮忙吗?