【发布时间】:2015-03-15 11:16:27
【问题描述】:
我正在开发一个房地产网站,我们即将获得大约 100 万个列表的外部提要。假设每个列表有大约 10 张与之关联的照片,那就是大约 1000 万张照片,我们需要将每张照片下载到我们的服务器,以免“热链接”到它们。
我完全不知道如何有效地做到这一点。我玩了一些数字,我得出结论,基于每张图片下载速度为 0.5 秒,这可能需要大约 58 天才能完成(从外部服务器下载大约 1000 万张图片)。这显然是不可接受的。
每张照片的大小似乎约为 50KB,但可能会有所不同,有些更大,有些更大,有些则更小。
我一直在简单地使用:
copy(http://www.external-site.com/image1.jpg, /path/to/folder/image1.jpg)
我也尝试过 cURL、wget 等。
我知道其他网站会这样做,而且规模要大得多,但我一点也不知道他们是如何在不花几个月时间的情况下管理这类事情的。
基于我们要接收的 XML 提要的 Sudo 代码。我们正在使用 PHP 解析 XML:
<listing>
<listing_id>12345</listing_id>
<listing_photos>
<photo>http://example.com/photo1.jpg</photo>
<photo>http://example.com/photo2.jpg</photo>
<photo>http://example.com/photo3.jpg</photo>
<photo>http://example.com/photo4.jpg</photo>
<photo>http://example.com/photo5.jpg</photo>
<photo>http://example.com/photo6.jpg</photo>
<photo>http://example.com/photo7.jpg</photo>
<photo>http://example.com/photo8.jpg</photo>
<photo>http://example.com/photo9.jpg</photo>
<photo>http://example.com/photo10.jpg</photo>
</listing_photos>
</listing>
所以我的脚本将遍历每张照片以获取特定列表并将照片下载到我们的服务器,并将照片名称插入我们的照片数据库(插入部分已经完成,没有问题)。
有什么想法吗?
【问题讨论】:
-
按需下载?
-
最好在初始解析(XML 提要文件)时。但也欢迎其他想法。
-
下载不必串行完成 - 您可以同时获取所有 10 个,这可以显着减少下载时间。
-
在多个“后台任务”中使用“wget”。从您拥有的“详细信息”中生成源和目的地详细信息。时间限制取决于您的互联网连接速度和服务器的处理能力 - 取决于您可以同时运行多少个“wget”任务。
-
您可能还想询问当前图像主机他们可以处理多少请求。您不希望在不事先通知他们的情况下以 1000 个请求/秒的速度淹没他们。
标签: php