【问题标题】:Mass image download script in PHPPHP中的海量图像下载脚本
【发布时间】:2011-04-06 20:13:25
【问题描述】:

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

【问题讨论】:

  • -1 即使只是为了 lulz,您仍然会认为您正在窃取这些图像并成为其他服务器所有者的麻烦。
  • @Blender 显然,OP 要求进行某种优化。
  • 您不必每次都创建一个新的 curl。您可以重复使用相同的 curl 句柄,并且每次只需更改 url。
  • 我正在为一个小众网站开发搜索引擎。在这里阅读大多数这些 cmets 会很痛苦。该脚本将每天运行一次。当然是@Simen S
  • @Simen S,您应该根据它的有用程度对问题进行投票。发表评论,但不要对这个问题投反对票。同样,无论哪种方式,您都无法确定他的意图,并且在大多数情况下,该意图不应与投票相关。至少,根据我在 meta 上读到的内容,我认为不是。

标签: php download


【解决方案1】:

很可能是设置所有这些请求所需的时间变慢了。您应该考虑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”以进行演示)。

【讨论】:

  • 好的,我正在实现这个。但我有一个问题:如何设置文件的目的地(保存位置)?
  • @user606346,下载的数据会出现在你回调函数的$content中。你需要在那里处理它。或者,您可以设置CURLOPT_FILE 并传递您使用fopen() 打开的文件句柄。确保每次下载文件时都设置这些选项,否则您将覆盖同一个文件。 (这可能是使用 $content 处理它可能更容易的原因之一,特别是因为您希望您的数据相对较小。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2012-08-31
  • 2023-01-04
  • 1970-01-01
相关资源
最近更新 更多