ограничение размера функции прогресса php cURL

Я загружаю файл, используя cURL 7.38.0 с php 5.6, и я хотел бы получить прогресс загрузки. Это мой код:

$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>';
}

В большинстве случаев все работает нормально, за исключением того, что если размер файла превышает 2 ГБ, то $download_size возвращается -2147483648 а также $downloaded_size работает, пока не доберется до 2147483648 а также превращается в -2147483648 и перестает увеличиваться.

Вывод с файлом 3,4 ГБ следующий:

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?

Спасибо.

0

Решение

Тип аргумента функции CURLOPT_PROGRESSFUNCTION имеет двойной тип, поэтому вы, вероятно, приводите эти значения к int где-то в вашем коде. и, вероятно, поскольку ваша ОС является 32-битной архитектурой, вы переполняете ограничение размера int. Я бы посоветовал вам пересмотреть код, чтобы не приводить к большим двоичным числам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]