从URL向PHP服务器下载大型图像的高性能方法
我有一个arrray,有大约100个图像链接。图像大小约为5-10 MB。我想通过阵列循环并将所有图片下载到我的服务器。我找到了几种方法,从从URL向PHP服务器下载大型图像的高性能方法,php,curl,download,wget,Php,Curl,Download,Wget,我有一个arrray,有大约100个图像链接。图像大小约为5-10 MB。我想通过阵列循环并将所有图片下载到我的服务器。我找到了几种方法,从文件获取内容开始,但它会消耗我的内存 我也看过 Wget PHP副本 copy('http://example.com/image.php', 'local/folder/flower.jpg'); 秆 每个用户都有自己的数组(不同的图像链接)。将图片下载到我的服务器并要求最低性能(低内存使用率等)的最快方法是什么?当cURL/wget/copy接近并看到
文件获取内容开始,但它会消耗我的内存
我也看过
Wget
PHP副本
copy('http://example.com/image.php', 'local/folder/flower.jpg');
秆
每个用户都有自己的数组(不同的图像链接)。将图片下载到我的服务器并要求最低性能(低内存使用率等)的最快方法是什么?当cURL/wget/copy
接近并看到:它们的吞吐量“大致相同”,并且不会使用过多内存1。但是,
这些新方法也面临同样的问题;下载是按系列进行的
(虽然涉及到许多因素,包括带宽/延迟以及服务器/处理程序之间的分布,但增加一定程度的并行性将是提高总体吞吐量的最大方法。)
wget+并行繁殖
有几种方法可用于shell_exec和wget。这些方法可以并行生成(wget)进程
由于无法直接访问特定进程正在执行的操作,这还涉及欺骗输出重定向/处理。另一方面,这是一个“相对简单”的变化,而不是一次完成的shell exec
shell exec本身也应该针对注入攻击进行加固;在使用这种shell访问时,不应忽略安全性
cURL+multi-exec
更有利可图(最初也很复杂)的方法是使用。与curl\u exec
不同,multi-exec允许以异步方式处理curl,因此支持并行操作
这个过程有点复杂,但是;还有一些相关的问题(尽管我还没有找到这个特定问题的“杀手级问题/答案”):
实现可能还希望限制并行cURL请求的数量
我建议使用cURL,因为它避免了在处理外壳时“格外小心”。如果必须使用shell Excel,则考虑先将文件列表/目标保存到文件中,然后通过<代码> XARGS或其他方式来填充文件。使用cURL还允许对单个请求进行相关反馈
由于此操作可能会“花费一些时间”,下载可能应该通过队列/关闭请求机制完成。。但这是一个不同的蠕虫架构
1file\u get\u contents
的问题是,它将下载的数据作为字符串获取,这可能导致“内存不足”情况,具体取决于文件大小和PHP环境
但是,没有一种cURL/wget/open方法(如果操作正确)存在此问题,因为它们直接流式传输到文件。(在这个问题中,cURL可能会耗尽内存,因为它不能正确地流式传输到文件,而是在整个文件下载到内存后调用file\u put\u contents
)性能最低?你是说最高的?
copy('http://example.com/image.php', 'local/folder/flower.jpg');
$url = 'http://www.google.com/images/logo_sm.gif';
$path = '/var/www/html/images/images.gif';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($path, $data);