如何强制php取消压缩错误


How to force php to unsupress errors

我使用的是一个大型的第三方php软件,它有很多错误我正在尝试修复。然而,这很难做到,因为它使用@-例如@include 'brokenfile.php';有很多错误抑制,这会导致php在没有显示任何错误的情况下死亡。所以我看到的只是一个空白的屏幕,它告诉我什么。如何强制php显示错误,尽管它们被"抑制"?

有一个名为scream的扩展,它将禁用@运算符来调试

来自手册:

尖叫扩展提供了禁用静音错误控制操作员的可能性,以便报告所有错误。此功能由ini设置控制。

安装扩展,然后在php.ini中启用它:

scream.enabled = On    

备选方案:

此功能在最新的xdebug版本中也可用。您需要安装xdebug并设置

xdebug.scream = On

在php.ini中

使用小型shell命令可以递归地从代码中删除所有"@":

find . -type f | xargs perl -pi -e 's/^@|('s)@/$1/g'

或者您可以为每个更新的文件创建备份:

find . -type f | xargs perl -pi.bkp -e 's/^@|('s)@/$1/g'

使用这个:

<?php
function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
function catchException($e)
{
    if (error_reporting() === 0)
    {
        return;
    }
    // Do some stuff
}
set_exception_handler('catchException');
?>

"如果您用set_error_handler()设置了一个自定义错误处理程序函数,那么它仍然会被调用,但这个自定义错误处理函数可以(也应该)调用error_reporting(),当触发错误的调用前面有@时,它将返回0。"

参考:错误控制操作员

Quick&肮脏、棘手的解决方案:你可以做一个find&替换整个项目,并简单地删除所有前面有空格的@,在Netbeans中,Ctrl+H可以做到这一点。您正在搜索的模式将是"@"(空格和at字符)。