我需要一个.php脚本,它会从其他网站下载大量图片。图像是拇指 - 每个大小约20KB。 我已经开发了自己的脚本,但遗憾的是它只是滞后于我的服务器并且几乎杀了它,迫使我重新启动它。
每次执行大约有100张图片,.jpg文件,大约20KB /文件。
我的剧本:
$count = 0;
foreach ($files as $file) {
$count++;
$url = $file;
$dl_place = '/home/lulz/'.$count.'.jpg';
$ch = curl_init($dl);
$fp = fopen($path, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
如你所见,我正在使用curl,但如果它比现在更好用,我愿意使用任何东西。
答案 0 :(得分:2)
可能的是,放慢速度的是设置所有这些请求所需的时间。您应该考虑Parallel cURL一次下载多个。源代码:https://github.com/petewarden/ParallelCurl/blob/master/parallelcurl.php
$pc->startRequest('http://www.whatever.com/someimage.jpg', 'your_callback_function');
我还发现,使用库,您可以在回调中使用匿名函数而不是函数名。我使用它来调用具有ID号的另一个函数,例如。
$requestid=37;
$pc->startRequest(
$url,
function($content, $url, $ch, $search) use $requestid {
yourRealCallback($content, $url, $ch, $search, $requestid);
}
);
这利用了一个带闭包的匿名函数,这样如果你正在搜索URL的数据库,你可以得到结果ID(你在for循环中指定的东西......硬编码为'37'在这里用于演示)。