-1

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

有人可以帮忙吗?

4

1 回答 1

1

在调试模式下 Symfony2 调用set_error_handler可能与register_shutdown_function. 在生产模式下不会发生。

于 2012-05-03T10:05:25.827 回答