有没有办法找出是否使用set_error_handler()函数来抑制此警告? @somethingwrong()和somethingwrong()的代码是2。但我不想记录所有警告。例如,像gzuncompress()这样的函数必须以这种方式处理,因为我无法测试有效的输入数据。
$handler = new errorHandler();
error_reporting(0);
set_error_handler(array($handler, 'handle'));
set_exception_handler(array($handler, 'exception'));
register_shutdown_function(array($handler, 'shutdown'));
class errorHandler
{
public function handle($code, $text, $file, $line)
{
if (($code & (E_STRICT | E_NOTICE)) == 0)
$this->log(...);
}
public function exception($exception)
{
...
}
public function shutdown()
{
$e = error_get_last();
if ($e !== NULL)
$this->log($error);
}
}
// the errors
include('notexisting.file'); // should be logged
@gzuncompress('somenonsens'); // should not be logged
答案 0 :(得分:0)
答案 1 :(得分:0)
我找到了解决方案。最初,我打电话
error_reporting(E_USER_ERROR);
这会抑制除一个错误之外的所有错误,我避免自己提出这些错误,因此它永远不会发生。我这样做是因为我自己拦截了所有错误,并以四种方式中的任何一种报告它们(筛选、通过电子邮件、本地日志、PHP 日志)。我这样做也是为了避免错误报告级别为 0。
然后,在错误处理程序或关闭函数中,我可以通过改变错误报告级别的事实来检测 at 符号的使用:
if (error_reporting() != E_USER_ERROR)
return; // Ignore this error
请注意,在 PHP 7 和 8 版本之间 at 符号的效果发生了变化。我没有在版本 8 中测试过这个。