我要使用CURLOPT_FILE选项下载文件。
$file_name = 'm1.dat';
$file = fopen($file_name, 'w');
$ch = curl_init($download_url);
curl_setopt($ch, CURLOPT_FILE, $file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
fclose($file);
我希望该文件将保存在$ file中,但$ file为空,并且curl_exec返回内容为 $ res中的文件。因此,我必须使用file_put_contents($ file_name,$ res)保存文件。
但是我想下载BIG文件(1Gb或更多),并且,正如我阅读的那样,下载CURLOPT_FILE具有更高的内存效率。使用file_put_contents,我的脚本可能会用完内存。
那么,为什么不卷曲将文件保存到$ file?我使用PHP 7.3.9,在Windows和Linux OS上都遇到这样的问题。
答案 0 :(得分:0)
从curl_setopt(https://www.php.net/manual/en/function.curl-setopt.php#99082)的音符来看,好像您应该在CURLOPT_RETURNTRANSFER
选项之前使用CURLOPT_FILE
...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILE, $file);