1

我有一个这样的 php 脚本:

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

一个 URL 有重定向问题,所以它重定向了 20 次以上。所以我收到这个警告:

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

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

我怎样才能忽略此警告并继续下一个网址?

谢谢您的帮助!

4

3 回答 3

2

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

您的脚本不会因为file_get_contents() redirection limit reached错误而停止。file_get_contents()触发E_WARNING非致命错误并且不会停止脚本

我的猜测是您的脚本由于最长执行时间限制或任何其他错误而停止。把你ini_set('display_errors', true);error_reporting(-1);电话放在文件的开头。


我怎样才能忽略此警告并继续下一个网址?

1.最简单/无用的解决方案是忽略带有@前缀的错误。

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

file_get_contents()2.您可以使用第三个参数$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 变魔术。
  • 将选项设置CURLOPT_FOLLOWLOCATIONtruefalse如果您希望遵循重定向。
  • 您甚至可以设置CURLOPT_MAXREDIRS要遵循的最大重定向数量的选项。
  • 设置CURLOPT_TIMEOUT允许执行 cURL 函数的最大秒数选项。

在此处查看其他选项。

于 2013-08-16T13:41:04.317 回答
-1

运行带@前缀的函数:

$html = @file_get_html($url);

应该解决问题。

您可以使用cURL并设置一个名为CURLOPT_FOLLOWLOCATIONto的参数TRUE

于 2013-08-16T11:55:24.623 回答
-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);

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

于 2013-08-16T11:56:52.620 回答