我正在使用一个大型的第三方php软件,它有许多我想要解决的错误。但是,这很难做到,因为它使用@来进行大量的错误抑制 - 例如@include 'brokenfile.php';
,导致php死亡而不显示任何类型的错误。所以我所看到的只是一个空白屏幕,它什么也没告诉我。我怎么强迫php显示错误,尽管他们被'压抑'?
答案 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之前是@。“
答案 3 :(得分:0)
快速&amp;肮脏,骇客的解决方案:你可以做一个发现&amp;替换整个项目并简单地删除所有在他们之前有空格的@,在Netbeans中这可以通过Ctrl+H
实现。您要搜索的模式为“@”(空格和字符)。