PHP中的海量图像下载脚本

PHP中的海量图像下载脚本,php,download,Php,Download,我需要一个.php脚本,可以从另一个网站下载很多图片。这些图像都是拇指大小的,每个大小约为20KB。 我已经编写了自己的脚本,但遗憾的是,它只是滞后于我的服务器,几乎使它死机,迫使我重新启动它 每次执行大约有100张图片或更多,.jpg文件,~20KB/文件 我的剧本: $count = 0; foreach ($files as $file) { $count++; $url = $file; $dl_place = '/home/lulz/'.$count.'.jpg'; $ch = cu

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

很可能,设置所有这些请求所需的时间会减慢。你应该考虑一次下载多个。源代码:

我还发现,使用库,您可以使用匿名函数,而不是回调函数的名称。例如,我使用它调用另一个具有ID号的函数

$requestid=37;
$pc->startRequest(
    $url, 
    function($content, $url, $ch, $search) use $requestid {
        yourRealCallback($content, $url, $ch, $search, $requestid);
    }
);

这利用了一个带闭包的匿名函数,这样,如果您正在搜索URL的数据库,您就可以得到结果ID(您在for循环中指定的ID或其他东西…此处硬编码为“37”以供演示).

-1即使只是为了lulz,您似乎仍在窃取这些图像,并成为另一台服务器所有者的助手。@Blender显然,OP要求进行某种优化。您不必每次都创建新的卷曲。你可以重复使用相同的卷曲手柄,每次只需更改url。我正在为一个小众网站开发搜索引擎。在这里读到这些评论中的大部分都很痛苦。此脚本将每天运行一次。当然是“西门”S@Simen你应该根据问题的有用程度来投票。不要发表评论,但不要否决这个问题。再说一次,无论哪种方式,你都无法确定他的意图,而且在大多数情况下,这种意图不应该与投票有关。至少,在我看来,不是基于我在meta上读到的。好的,我正在实现这个。但是我有一个问题:我如何设置文件的目的地(保存它的位置)?@user606346,下载的数据将以$content的形式出现在回调函数中。你需要在那里处理。或者,您可以设置
CURLOPT_FILE
并传递使用
fopen()
打开的文件句柄。确保每次下载文件时都设置这些选项,否则将覆盖同一文件。(这就是为什么使用$content更容易处理它的原因之一,特别是因为您希望数据相对较小。)
$requestid=37;
$pc->startRequest(
    $url, 
    function($content, $url, $ch, $search) use $requestid {
        yourRealCallback($content, $url, $ch, $search, $requestid);
    }
);