【问题标题】:file-get-contents: don't stop script when warning occurs (Redirection limit reached)file-get-contents:出现警告时不要停止脚本(达到重定向限制)
【发布时间】:2013-08-16 11:51:02
【问题描述】:

我有一个这样的 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 之后停止,并出现重定向问题。

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

感谢您的帮助!

【问题讨论】:

标签: php function


【解决方案1】:

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

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

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


我怎样才能忽略这个警告并继续下一个 url?

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

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

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

$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

【讨论】:

    【解决方案2】:

    运行带有@前缀的函数:

    $html = @file_get_html($url);
    

    应该能解决问题。

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

    【讨论】:

      【解决方案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);
      

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

      【讨论】:

      • 我认为file_get_contents() 函数不会抛出异常。如果我错了,请纠正我。
      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 2019-05-24
      • 2015-12-23
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多