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。
我正在使用 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。