如何强制php取消注释错误

时间:2013-07-05 15:18:56

标签: php error-reporting

我正在使用一个大型的第三方php软件,它有许多我想要解决的错误。但是,这很难做到,因为它使用@来进行大量的错误抑制 - 例如@include 'brokenfile.php';,导致php死亡而不显示任何类型的错误。所以我所看到的只是一个空白屏幕,它什么也没告诉我。我怎么强迫php显示错误,尽管他们被'压抑'?

4 个答案:

答案 0 :(得分:4)

有一个名为scream的扩展程序,它会禁用@运算符以进行调试

从手册:

  

scream扩展可以禁用静默错误控制操作符,以便报告所有错误。此功能由ini设置控制。

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

scream.enabled = On    

替代:

此功能也适用于最近的xdebug版本。你需要安装xdebug并设置

xdebug.scream = On

在php.ini中

答案 1 :(得分:1)

可以使用小shell命令以递归方式从代码中删除所有“@”:

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

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

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

答案 2 :(得分:0)

使用它:

<?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时,它将返回0之前是@。“

参考:Error Control Operators

答案 3 :(得分:0)

快速&amp;肮脏,骇客的解决方案:你可以做一个发现&amp;替换整个项目并简单地删除所有在他们之前有空格的@,在Netbeans中这可以通过Ctrl+H实现。您要搜索的模式为“@”(空格和字符)。