0

我每晚都使用 cron 服务运行 PHP 脚本。它输出的所有内容都将打印到日志文件中以进行调试。我使用的文件将使用函数“file_get_contents()”从不同的站点检索 xml。但是该函数可能会返回一个我真的不想看到的错误,因为我已经显示了一个自定义错误。

我的一段代码的快速示例:

$buffer = @file_get_contents('http://xx:xx@xx/xml/xx?offset=2') or print('retry in 5 seconds');

if($buffer === false) {
  sleep(5);
  $buffer = @file_get_contents('http://xx:xx@xx/xml/xx?offset=2') or print('error notice');
}

问题是第一个会触发错误并打印它会在 5 秒内重试。如何正确抑制抛出的错误?

我有一个错误处理程序,但我不想单独捕获此错误。

编辑:我的解决方案不是更改error_reporting,而是捕获错误消息。如果它以 'file_get_contents()' 开头,则不会引发错误。这不是最好的方法,但会为我完成这项工作。

4

3 回答 3

2

您可以尝试在开头插入:

error_reporting(0);

然后在带有错误/警告的代码之后:

error_reporting(E_ALL ^ E_WARNING);
于 2012-08-02T08:07:29.190 回答
1

好的,永远不要使用 @-operator。

在 PHP 中,您有两个可用选项:使用自定义错误处理程序或使用 try/catch。

由于 file_get_contents 不会抛出异常,所以只能使用第一种方法。

您可以像这样设置错误处理程序:http: //php.net/set-error-handler然后正确操作(记录某些内容或返回自定义错误代码)。

如果您只想关闭所有错误使用error_reporting(0),或者您只想关闭特定类别的使用error_reporting(E_ALL ^ E_WARNING)(除警告之外的所有内容)或明确指定它们error_reporting(E_WARNING | E_NOTICE)(警告和通知)。

我更喜欢第一种方法,因为当您禁用它时,您不知道代码中发生了什么。

于 2012-08-02T08:11:43.000 回答
0

在命令前添加 @ 或使用 try catch。

于 2012-08-02T08:06:02.847 回答