我使用的是一个大型的第三方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字符)。