如何强制php取消按下错误

如何强制php取消按下错误,php,error-reporting,Php,Error Reporting,我正在使用一个大型的第三方php软件,它有许多我正在试图修复的bug。然而,这是非常困难的,因为它有很多错误抑制使用@-例如,@包括'brokenfile.php',这会导致php死机而不显示任何类型的错误。所以我所看到的只是一个空白屏幕,它什么也没告诉我。如何强制php显示错误,尽管它们被“抑制”?有一个扩展名为它将禁用@操作符进行调试 从手册中: 尖叫扩展提供了禁用消声错误控制操作员的可能性,以便报告所有错误。此功能由ini设置控制 安装扩展,然后在php.ini中启用它: scream.e

我正在使用一个大型的第三方php软件,它有许多我正在试图修复的bug。然而,这是非常困难的,因为它有很多错误抑制使用@-例如,
@包括'brokenfile.php',这会导致php死机而不显示任何类型的错误。所以我所看到的只是一个空白屏幕,它什么也没告诉我。如何强制php显示错误,尽管它们被“抑制”?

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

从手册中:

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

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

scream.enabled = On    

备选方案:

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

xdebug.scream = On
在php.ini中使用以下命令:

<?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


Ref:

快速而肮脏的黑客解决方案:您可以对整个项目进行查找和替换,只需删除前面有空白的所有@,在Netbeans中,这可以通过
Ctrl+H
实现。您正在搜索的模式是“@”(空格和at字符)。

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

find . -type f | xargs perl -pi -e 's/^@|(\s)@/$1/g'
或者,您可以为每个更新的文件创建备份:

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

只需启用尖叫扩展并使用ini_设置('scream.enabled',true)尖叫就可以了,但它不适合我。phpinfo说它已启用,但@仍在防止出错。您必须先安装扩展。该手册包含了有关如何执行此操作的信息。似乎是时候更新xdebug并删除scream了。谢谢分享。你将如何再次应用它们?虽然建议一个perl解决方案很有趣,但它会对整个系统造成严重损害code@hek2mgl是的,但这只是在没有使用版本控制系统(例如git、svn等)的情况下-您可以这样做,调试问题,然后在执行修复之前还原文件。@hek2mgl如果不使用版本控制系统,可以创建备份文件:perl-e“s/FIND/REPLACE/g;”-pi.bkp$(FIND path/app-type f)@Benubird是的,首先要做的是将代码添加到存储库中。