使用非阻塞ftp函数下载文件并计算时间和文件大小差异.下面是一个带指数平滑的简单演示,可以防止速度过快跳跃:
define('ALPHA', 0.2); // Weight factor of new calculations, between 0 and 1
$ftp = ftp_connect(...);
$tmp = ftp_nb_get($ftp, $filename, $filename, FTP_BINARY);
$transferred = 0;
$rate = 0;
$time = microtime(true);
while ($tmp == FTP_MOREDATA) {
$tmp = ftp_nb_continue($ftp);
$timeNow = microtime(true);
$sizeNow = filesize($filename);
$currentRate = ($sizeNow - $transferred) / ($timeNow - $time);
$rate = ALPHA * $currentRate + (1 - ALPHA) * $rate;
$time = $timeNow;
$transferred = $sizeNow;
echo "Current transfer speed: $rate B/s\n";
}
Run Code Online (Sandbox Code Playgroud)
如果你想为同样的事情ftp_nb_put()上传,你就必须更换filesize($filename)同ftp_size($ftp2,$filename),这里$ftp2必须是第二个相同的连接,只是用来问远程文件的大小,因为ftp_size()不会与你的主连接工作,而无阻塞传输正在处理.