Я загружаю файл с использованием cURL 7.38.0 с php 5.6, и я хотел бы получить ход загрузки. Это мой код:php cURL progress function limit limit
$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?
спасибо.
Поместите весь код функции 'downloadProgress()', это, скорее всего, означает, что переменная, в которой хранится размер загрузки, является регулярным «знаковым целым числом», то есть от 2^32 до -2^32, см. Это http://stackoverflow.com/questions/13657630/curlopt-progressfunction-what-these-parameters-mean и этот http://stackoverflow.com/questions/22417507/in-my-curl-curlopt-progressfunction-callback-dltotal -is-always-0 по аналогичным проблемам – bodi0
Похоже, что максимальный размер представляет собой 32-битное целое число. –
Также хороший вариант альтернативы curl для обратного вызова прогресса, см. Здесь http://curl.haxx.se/libcurl/c/CURLOPT_XFERINFOFUNCTION.html – bodi0