在循环中使用CURL下载文件,第一个工作,第二个工作,第二个工作
问题描述:
早上所有,在循环中使用CURL下载文件,第一个工作,第二个工作,第二个工作
我正在使用CURL来下载循环中的图像文件。第一次运行良好,我看到图像出现在目录中。
第二次失败并发生超时,尽管它是有效的URL。
任何人都可以提出为什么它总是在第二次失败,以及如何解决它?
的代码片段是:
// 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 字节收到
一个空文件在我的目录中创建。
非常感谢,
格雷格
答
如果你一遍又一遍地打同一个网站,他们可能有一些东西,超时请求太快到来。如果您正在循环,请在每次迭代后尝试添加简短的sleep
。
你应该着眼于使用的一件事是多卷曲。它并行运行Curl操作。 Curl Functions on php.net部分记录它们。我建议看看this tutorial。有人可能写了一个面向对象的卷曲和多卷曲的抽象。
我试过60秒睡眠,但我仍然有同样的问题... – kitenski 2010-06-07 11:22:12