如何使用cURL progress_回调(PHP)计算下载速度

如何使用cURL progress_回调(PHP)计算下载速度,php,curl,upload,download-speed,Php,Curl,Upload,Download Speed,我使用cURL通过给定的URL上传文件。(用户提供URL,我的服务器下载文件) 对于进度条,我使用CURLOPT_PROGRESSFUNCTION选项。 我想让progress的函数也计算下载的速度,以及剩余的时间 $fp = fopen($temp_file, "w"); $ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,

我使用
cURL
通过给定的URL上传文件。(用户提供URL,我的服务器下载文件)

对于进度条,我使用
CURLOPT_PROGRESSFUNCTION
选项。 我想让progress的函数也计算下载的速度,以及剩余的时间

$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\u 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;

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

@CarstenHellweg我想你不明白我的问题。回调函数工作正常。我想要的是计算文件下载到服务器的速度,并为下载留出大量时间。这行告诉我
PHP警告:除以零:
$currentSpeed=($download_size-$prevSize)/(time()-$prevTime)
@ArielAharonson嗯,我应该检查一下代码。请检查更新的答案。谢谢!现在可以了。顺便问一下:是否可以减少函数
curl\u progress\u callback
运行的时间?例如,如果函数在一秒钟内运行100次,是否可以将其设置为50次?@ArielAharonson您可以通过使用
curl\u setopt
CURLOPT\u BUFFERSIZE
更改为更高的值来实现这一点。它会影响其他任何事情,还是只影响函数的重复率?