这个问题在这里已有答案:
我正在使用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左右)时,没有任何工作。
我已经尝试为:post_max_size upload_max_filesize max_file_uploads设置10000M文件大小限制,但这不起作用。
我试图将内存限制增加到512M甚至-1,但这不起作用。
那么如何使用cURL获取大文件?
你觉得这条线怎么样? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- 它告诉php捕获curl_exec的所有stdout输出,并在执行任何其他操作之前将其全部保存在内存中,这是一种非常慢的方法(因为在下载完成100%之前你没有开始写入磁盘,除非你在SSD上运行,磁盘速度很慢,而且内存非常耗时(因为你将整个文件一次存储在内存中),这些都不是必需的。相反,做$fp=fopen(basename($url),'wb');curl_setopt($ch,CURLOPT_FILE,$fp);
- 现在curl会将内容直接写入磁盘,因此速度更快(在下载时将其写入磁盘)并且只需使用少量ram,无论下载文件有多大。