php cURL 进度函数大小限制

php cURL progress function size limit

我正在使用 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 returns -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 限制?

谢谢。

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