3

以下 php 代码在控制台“数据错误”上输出。发生这种情况的原因是一个已知问题,但我想摆脱错误消息。

<?php   
    gzuncompress("foo");
?>

我在网上搜索了如何抑制 php 上的错误消息并尝试了以下方法,但没有成功:

<?php   
    error_reporting(0); 
    ini_set("display_errors",0);
    ob_start(); 
    @gzuncompress("foo");
    ob_end_clean();
?>

非常感谢!

4

1 回答 1

2

这很可能是您指定了自定义错误处理程序。

推理:

  1. ob_start() / ob_end_clean() 是浪费时间 - 这不会抑制警告消息,只会抑制您通过回声等抽出的内容。所以放下这两行。

  2. error_reporting(0) 应该足够了——这表示“关闭所有错误”。您不会在错误日志或屏幕上看到它。但是仍然会调用自定义错误处理程序。

  3. “display_errors”将阻止它进入屏幕,但它会出现在您的日志文件中。

  4. @ 也会抑制消息 - 本质上它会临时设置“error_reporting(0)”。但是仍然会调用 cusom 错误处理程序。

因此,唯一能解决所有这些问题的是自定义错误处理程序。即使您使用 @ 抑制错误或使用 error_reporting(0),它仍然会被调用。客户错误处理程序本身应调用 error_reporting(),如果为“0”,则应确保它不会产生错误。它可能有自己的“保留缓冲区,吐出我的消息然后恢复缓冲区”代码,这就是它绕过 ob_start() 的原因。

只有我能想到的原因:我刚刚通过控制台和 webbrowser / apache 在上面运行了您的代码,并且它很干净 - 没有显示警告等,如您所愿。

于 2012-09-07T05:25:13.043 回答