Как рассчитать скорость загрузки с помощью cURL progress_callback (PHP)

Я использую cURL загрузить файл по указанному URL. (пользователь дает URL, а мой сервер скачивает файл)

Для индикатора выполнения я использую CURLOPT_PROGRESSFUNCTION вариант. Я хочу, чтобы функция прогресса также рассчитывала скорость загрузки и сколько времени осталось.

$fp = fopen($temp_file, "w");
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, "curl_progress_callback");
curl_setopt($ch, CURLOPT_FILE, $fp);
$success = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
fclose($fp);

function curl_progress_callback ($download_size, $downloaded_size, $upload_size, $uploaded_size) {
    global $fileinfo;
    if (!$downloaded_size) {
        if (!isset($fileinfo->size)) {
            $fileinfo->size = $download_size;
            event_callback(array("send" => $fileinfo));
        }
    }
    event_callback(array("progress" => array("loaded" => $downloaded_size, "total" => $download_size)));
}

Спасибо! и извините за мой английский

1 ответ

Решение

Добавить это раньше curl_exec:

$startTime = $prevTime = microtime(true);
$prevSize = 0;

Вы можете рассчитать среднюю и текущую скорость, а также оставшееся время, добавив это к функции обратного вызова:

$averageSpeed = $downloaded_size / (microtime(true) - $startTime);

$currentSpeed = ($downloaded_size - $prevSize) / (microtime(true) - $prevTime);
$prevTime = microtime(true);
$prevSize = $downloaded_size;

$timeRemaining = ($downloaded_size - $download_size) / $averageSpeed;

Скорость измеряется в байтах / с и оставшееся время в секундах.

Другие вопросы по тегам