如何在PHP中使用CURLOPT_FILE判断卷曲下载是否完整

时间:2014-02-25 01:25:11

标签: php curl download

我有一个将特定zip文件从远程服务器下载到本地Windows服务器的功能。该文件的大小范围从1-10 MB,我希望我的脚本等到它完成。我怎么能肯定地告诉它已经完成了?实际下载工作正常。

功能是:

function get_download($url, $path) 
{ 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL,$url); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie2.txt'); 
    curl_setopt($curl, CURLOPT_FILE, $path);
    $results = curl_exec($curl); 
    return $results; 
}

我以为我会先获取远程文件的大小,然后再与本地文件大小进行比较。但是,这似乎不起作用。不确定它的文件函数是否是.zip文件,但它总是返回-1或-11。我试过这个功能:

function remotefileSize($url) 
{
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_NOBODY, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 3);
    curl_exec($curl);
    $filesize = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    curl_close($curl);
    return $filesize;
}

1 个答案:

答案 0 :(得分:0)

在下载文件时,您是否在浏览器上看到显示Unknown time remainingUnknown bytes remaining的内容?这是因为浏览器无法检索大小并且无法计算剩余时间或大小。这就是你发生的事情。您的文件大小检索代码是正确的。

另一个原因可能是:有时服务器不支持HEAD请求(当您使用CURLOPT_NOBODY时)。