【问题标题】:Using CURL within a loop to download a file, 1st one works, 2nd one times out在循环中使用 CURL 下载文件,第一个有效,第二个超时
【发布时间】:2010-06-07 10:43:51
【问题描述】:

早上好,

我正在使用 CURL 在循环中下载图像文件。第一次运行良好,我看到图像出现在目录中。

第二次失败并超时,尽管它是一个有效的 URL。

谁能建议为什么它总是在第二次失败以及如何修复它?

代码的sn-p为:

// download image

$extension = "gif";
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 90);
curl_setopt($ch, CURLOPT_URL, $imgurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
echo $imgurl . " attempting to open URL ";
$i = curl_exec($ch);
if ( $i==false ) {
  echo curl_errno($ch).' '.curl_error($ch);
}
$image_name=time().'.'.$extension;
$f = fopen('/fulldirectorypath/' . $image_name ,'w+');
fwrite($f,$i);
fclose($f);

我在其中放置了一个回显以显示 $IMGURL,以检查它是否有效,并将超时时间提高到 90 秒,但它仍然失败。这是我在屏幕上看到的:

http://images.eu-xmedia.de/thumbnails/34555861/5676051/pt=pic,lang=2,origfile=yes/image.gif 试图打开 URL 28 操作 90 秒后超时,为 0 收到的字节数

在我的目录中创建了一个空文件。

非常感谢,

格雷格

【问题讨论】:

    标签: php curl timeout


    【解决方案1】:

    尝试在fclose($f); 之后添加curl_close($ch);。在我看来,它可能正在尝试重用连接,这反过来又会导致问题。

    【讨论】:

    • 感谢 Joseph,我刚刚尝试过,但仍然遇到同样的问题。
    • 如果您运行单个实例(而不是循环),然后在完成后立即刷新浏览器,那么它可以工作吗?
    • 有趣...我创建了一个小测试文件,使用不同的 IMG 链接它可以工作,上面确定的那个我遇到了同样的问题....
    • 新的测试文件也是gif吗?
    【解决方案2】:

    如果您一遍又一遍地访问同一个网站,他们可能会遇到一些超时请求进入太快的问题。如果您正在循环,请尝试在每次迭代后添加简短的sleep

    您可能应该考虑使用的一件事是多卷曲。它并行运行 Curl 操作。 Curl Functions on php.net 部分记录了它们。我建议查看this tutorial。可能有人已经写了 curl 和 multi-curl 的面向对象的抽象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多