3

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

4

4 回答 4

5

有一个扩展名为scream它将禁用@操作员进行调试

从手册:

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

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

scream.enabled = On    

选择:

最近的 xdebug 版本也提供此功能。您需要安装和设置 xdebug

xdebug.scream = On

在 php.ini 中

于 2013-07-05T15:20:08.850 回答
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'
于 2013-07-05T15:37:12.723 回答
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(),当触发错误的调用前面有一个@。”

参考:错误控制运算符

于 2013-07-05T15:22:48.430 回答
0

快速而肮脏,hacky 的解决方案:您可以对整个项目进行查找和替换,然后简单地删除前面有空格的所有 @,在 Netbeans 中,这可以使用Ctrl+H. 您正在搜索的模式是“@”(空格和字符)。

于 2013-07-05T15:22:58.060 回答