大量图像下载脚本在PHP


Mass image download script in PHP

我需要一个.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,但我愿意使用任何东西,只要它比现在更好。

减慢速度的可能是设置所有这些请求所花费的时间。您应该考虑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的DB,你可以得到结果ID(你在for循环或其他东西中指定的)…(此处硬编码为'37'以供演示)。