2016-08-16 147 views
-4

我运行一个脚本,网址参数是由1每隔一段时间增加,我得到错误信息下方和脚本进入停止状态:忽略警告并进行

警告:的file_get_contents( https://example.com?id=431):无法打开 流:HTTP请求失败! HTTP/1.1 429几 分钟

$i = 1; 
while($file = file_get_contents('https://example.com?id='.$i)) { 
    echo ''.$i.'</br>'; 
$i++ 
} 

虽然我知道我可以使用error_reporting(0);阻止出现的警告后,请再试一次,我的问题是:将脚本继续隐藏的警告后运行?

+6

**忽略警告,错误不是一个好主意**。 –

+0

@ ZainFarooq这是否允许脚本继续运行,还是只是隐藏错误,但仍然停止脚本? –

+0

您可以禁止警告,但不建议使用'@ file_get_contents'。如果你仍然打算这样做,我建议你检查'$ file'是否为'false' –

回答

0

将此放在脚本的顶部以避免警告通知

error_reporting(E_ERROR); 

这仍然会显示致命的运行时错误。这表明 无法从中恢复,例如内存分配问题。 该脚本的执行被暂停。

把所有的错误和警告,

error_reporting(0); 
+0

这是否允许脚本继续运行,或者它只是隐藏错误,但仍然停止脚本? –

+0

是的,这将允许脚本运行,除非你有任何致命的运行时错误。 –

0

你可以试试这个:

error_reporting(0); 

在脚本的顶部将这个

+0

这是否允许脚本继续运行,还是只隐藏错误但仍然停止脚本? –

+0

如果您的内容无法访问,那么可能只是停止报告错误。 –

+0

但url参数会继续增加吗? –

2

这是不是你应使用prod,但请尝试:

error_reporting(E_ERROR | E_PARSE); 

我认为最好在试图读取文件之前检查文件是否可达。

+0

这是否允许脚本继续运行,或者它只是隐藏错误,但仍然停止脚本? –

+0

它应该继续。但警告不应忽视...... –

1

更换条件,例如:

while($i < 100) 
5

你可以,当然,禁用错误报告的其他建议。但是,有两个更好的解决方案。

首先,您可以使用set_error_handler创建一个将错误转换为异常的函数(示例1中的代码为http://php.net/manual/en/class.errorexception.php)。然后,您可以简单地使用trycatch来检查是否发生了异常,并对其进行适当处理。看到这里:http://php.net/manual/en/internals2.opcodes.catch.php

另一种解决方案是使用PHP的cURL库(http://php.net/manual/en/book.curl.php)。 cURL将让您检查在发出HTTP请求时是否发生了错误,并且可以进行适当的响应。

要清楚,因为它似乎是OP唯一关心的问题:这两种解决方案都将允许脚本在发生错误后继续运行。它们还具有额外的好处,允许OP创建代码,使得对错误作出预定的程序化响应,而不是盲目地忽略具有未知结果(并且没有表明它们甚至发生)的任何和全部错误。

最后,一个适用于这种特殊情况的注释:HTTP 429是“太多的请求”,这是有道理的,因为OP正在一个接一个地放置这些请求而没有任何延迟。在HTTP请求之间睡觉(http://php.net/manual/en/function.sleep.php)可能完全消除该问题。