卷毛忽略CURLOPT_FILE

时间:2020-05-20 06:26:03

标签: php curl

我要使用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上都遇到这样的问题。

1 个答案:

答案 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);