记录php时出错 - error_reporting(0)没有预期的效果

时间:2010-03-02 18:22:39

标签: php error-handling

我有一个非常简单的页面,它获取一个url并解析一些数据。

如果响应是404错误,我已在内容中内置了一些错误处理。

然而,我似乎无法阻止php吐出以下错误

 Warning: file_get_contents(http://url-to-retrieve.com/123.html) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/html/maickl/procs/get.php on line 84

Notice: Undefined offset: 0 in /var/www/html/maickl/procs/get.php on line 91

我用

开始页面
error_reporting(0)

有关为什么会发生这种情况的原因,为什么这些错误没有被抑制(似乎只在这个页面上),以及我能做些什么呢?

4 个答案:

答案 0 :(得分:5)

使用error_reporting(0); shoud禁用错误报告,这意味着您不应该收到错误 - 您确定它没有在某处重新启用吗?


但实际上,您可能正在寻找的不是更改error_reporting,而是禁用display_errors,这可以使用类似这样的代码来完成:

ini_set('display_errors', 'Off');

有了这个:

  • 错误/警告不会显示在您的网站上,这对最终用户很好(绝不应显示技术错误)
  • error_reporting未被停用,这意味着可以/仍将记录错误 - 请参阅log_errorserror_log

答案 1 :(得分:5)

另请记住,如果您设置了用户定义的错误处理函数,则error_reporting()设置将被完全忽略。

答案 2 :(得分:3)

关闭错误报告是一种方法,但我建议只修复错误或添加适当的错误处理。

try {
     //try to do the following
     $content = file_get_contents('file/to/try.txt');
} catch (Exception $e) {
     //do this in case of an error
     die($e->getMessage());
}

答案 3 :(得分:0)

确保您没有忘记 debug_print_backtrace() 的输出。您仍然可以使用以下方法捕获它并防止其输出到客户端:

ob_start(); 
$error = mysqli_real_escape_string($db, $error.print_r(debug_print_backtrace(),1));
ob_end_clean();