php - 如何使用 cURL progress_callback 计算下载速度 (PHP)

标签 php curl upload download-speed

我正在使用 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)));
}

谢谢!对不起我的英语

最佳答案

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;

速度以字节/秒为单位,剩余时间以秒为单位。

关于php - 如何使用 cURL progress_callback 计算下载速度 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963627/

相关文章:

php - 如何使用 Wget 下载网页?

php - PHP 中的多步表单 - MVC 应用程序

linux - 使用位于单独文件中的 json 运行 curl -X PUT

php - Atlassian Confluence 基本登录 API 不工作 : Page Not Found

php - 上传多个实例时需要重命名文件的帮助

.htaccess - 1&1 服务器上的访问被拒绝

file - 如何使用 cakephp 2.x 上传文件并将其附加到电子邮件?

php - 如何在 Joomla 组件中使用 Jquery AJAX?

php - AJAX 无法发送到 PHP

PHP 循环不会遍历每一行