php cURL进度函数大小限制

时间:2015-05-05 10:56:43

标签: php curl download progress

我正在使用带有php 5.6的cURL 7.38.0下载文件,我想获得下载进度。这是我的代码:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://path/to/file.zip");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 65536);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'downloadProgress'); 
curl_setopt($ch, CURLOPT_NOPROGRESS, false);

curl_exec($ch);
curl_close($ch);

function downloadProgress ($resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) {
    echo 'download_size: ' . $download_size . '; downloaded_size: ' . $downloaded_size . ';<br>';
}

大部分时间内一切正常,但如果文件大于2GB,则$download_size会返回-2147483648,而$downloaded_size会一直有效,直到2147483648为止转到-2147483648并停止递增。

带有3.4GB文件的输出如下:

download_size: 0; downloaded_size: 0;
download_size: -2147483648; downloaded_size: 1147;
download_size: -2147483648; downloaded_size: 1147;
download_size: -2147483648; downloaded_size: 16987;
download_size: -2147483648; downloaded_size: 16987;
download_size: -2147483648; downloaded_size: 25627;
...
download_size: -2147483648; downloaded_size: -2147483648;
download_size: -2147483648; downloaded_size: -2147483648;
download_size: -2147483648; downloaded_size: -2147483648;

我做错了什么或是php cURL限制吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

CURLOPT_PROGRESSFUNCTION函数参数类型是double,因此您可能会在代码中的某处将这些值转换为int。并且可能因为你的操作系统是基于32位的体系结构,所以你会超出int大小限制。我建议你修改你的代码,以避免转换为大的双数字。