file-get-contents:发生警告时不要停止脚本(达到重定向限制)

时间:2013-08-16 11:51:03

标签: php function

我有一个像这样的PHP脚本:

include_once('simple_html_dom.php');
foreach ($csvarray as $product){
   $url = $product[31];
   $html = file_get_html($url);
   ...
}

一个网址存在重定向问题,因此重定向次数超过20次。 所以我收到了这个警告:

  

警告:file_get_contents(http:/ ...)   [function.file-get-contents]:无法打开流:重定向限制   到达,在...中止......

不幸的是,我的csvarray的其他网址没有被处理,因为脚本在此URL之后因重定向问题而停止。

如何忽略此警告并继续使用下一个网址?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

  

不幸的是,我的csvarray的其他网址没有得到处理,因为脚本在此网址之后因重定向问题而停止。

由于file_get_contents() redirection limit reached错误,您的脚本不会停止。 file_get_contents()触发E_WARNING这是非致命错误,不会停止脚本

我的猜测是你的脚本因最大执行time limit或任何其他错误而停止。将ini_set('display_errors', true);error_reporting(-1);放在通话文件的开头。


  

如何忽略此警告并继续使用下一个网址?

1。最简单/最简单的解决方案是忽略@前缀的错误。

$html = @file_get_contents('http://bit.ly/6wgJO');

2。您可以使用第三个参数file_get_contents()context options and parameters)增加/减少$context的最大重定向:

$context = stream_context_create(['http' => ['max_redirects' => 50]]);
$html = @file_get_contents('http://bit.ly/6wgJO', false, $context);

3。隐藏错误的其他解决方案是上下文选项中的ignore_errors

$context = stream_context_create(['http' => ['max_redirects' => 0, 'ignore_errors' => true]]);
$html = file_get_contents('http://bit.ly/6wgJO', false, $context);

4。使用cURL

  • 你可以用cURL做魔法。
  • 如果您希望关注重定向,请将选项CURLOPT_FOLLOWLOCATION设置为truefalse
  • 您甚至可以为要遵循的最大重定向数量设置选项CURLOPT_MAXREDIRS
  • 将选项CURLOPT_TIMEOUT设置为允许cURL函数执行的最大秒数。

请参阅其他选项here

答案 1 :(得分:-2)

使用@前缀:

运行该功能
$html = @file_get_html($url);

应该解决问题。

您可以使用cURL并将名为CURLOPT_FOLLOWLOCATION的参数设置为TRUE

答案 2 :(得分:-3)

有几种方法可以做到这一点,一种方法是尝试捕捉异常

try {
$html = file_get_html($url);
}catch(Exception $e){
//Do what you want to do with the code
}

另一种方法是在file_get_html前面使用@来简单地抑制警告:

$html = @file_get_html($url);

如果您想了解更多,但有更好的方法可以处理此错误,但这些是最简单的。