PHP:register_shutdown_function 并不总是适用于 Symfony 2

标签 php error-handling symfony

我正在尝试使用 register_shutdown_function 来“捕获”PHP fatal error ,以便我可以返回一个干净的错误消息。

在一个简单的 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';
}
}

然而,当在 Controller 内部的 Symfony 2 操作中使用相同的机制时,不再处理测试用例 #2:我的处理程序仅在变量之前已初始化时才被调用。但是,在这两种情况下,我们都在处理同一种 fatal error (调用非对象的成员方法)。

有人可以帮忙吗?

最佳答案

在 Debug模式下 Symfony2 调用 set_error_handler这可能与 register_shutdown_function 冲突.在生产模式下不会发生。

关于PHP:register_shutdown_function 并不总是适用于 Symfony 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427692/

相关文章:

php - Symfony3如何在数据库中存储用户角色

javascript - 从 XMLHttpRequest 调用的 PHP 将值返回到 Javascript

php - 两个字符串之间交集的第一段

service - 如何在Windows Service应用程序中向用户创建提示/通知?

java - 新的 Servlet 3.0 全局错误页面功能在 Tomcat 7 上不起作用

php - Doctrine 2 保留实体并从插入查询中排除空字段

php - 出现验证时如何对齐文本输入和标签

mysql - max_allowed_pa​​cket=1024M... 它仍然给我错误 "Got a packet bigger than ' max_allowed_pa​​cket' bytes query...”

php - CSRF token 无效。请尝试重新提交表格

azure - 使用 Azure 和调用图保护我的 Symfony API