我正在使用PHP和cURL开发一个leecher网站。
以下是基本代码:
$ch = curl_init();
$url = "http://somesite.com/somefile.part1.rar";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$file_name = basename($url);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents($file_name, $output);
当文件大小很小(大约15MB)时,这段代码可以工作,文件会被提取到我的服务器,但是当文件大小很大(比如1GB左右)时,没有任何工作。
我尝试过设置10000M文件大小限制: 的post_max_size 的upload_max_filesize max_file_uploads 但那没有用。
我已经尝试将内存限制增加到512M甚至-1,但是这并没有工作。
那么如何使用cURL获取大文件?
答案 0 :(得分:0)
您认为这条线的作用是什么? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- 它告诉php捕获curl_exec的所有stdout输出,并在执行任何其他操作之前将其全部保存在内存中,这两种方法都非常慢(因为你不开始在下载100%完成之前写入磁盘,除非你在SSD上运行,磁盘速度慢,并且极度耗费内存(因为你将整个文件一次存储在内存中),这些都不是可取的。相反,做$fp=fopen(basename($url),'wb');curl_setopt($ch,CURLOPT_FILE,$fp);
- 现在curl会将内容直接写入磁盘,因此速度更快(将其写入磁盘,因为它正在被下载)并且只需使用少量内存,无论如何下载文件很大。