当通过PHP函数连接到FTP时,如何在PHP中测量FTP传输速度
我通过PHP当通过PHP函数连接到FTP时,如何在PHP中测量FTP传输速度,php,ftp,benchmarking,Php,Ftp,Benchmarking,我通过PHPftp\uu函数连接到服务器 如何测量传输速度 在传输之前,将当前时间戳放入变量中 确定要传输的文件的大小 使用ftp功能传输文件 获取另一个时间戳并从第一个时间戳中减去它 将文件大小除以结果,就得到了kb/秒 例如: $start = mktime(); // 1 $size = filesize('yourfile.txt') / 1024 ; // 2 <- to get the KB ... do your transfer... // 3 //after ftp
ftp\uu
函数连接到服务器
如何测量传输速度
ftp
功能传输文件$start = mktime(); // 1
$size = filesize('yourfile.txt') / 1024 ; // 2 <- to get the KB
... do your transfer... // 3
//after ftp transfer
$stop = mktime(); // 4
$duration = $stop - $start;
$speed = $size / $duration; // 5
$start=mktime();//1.
$size=filesize('yourfile.txt')/1024;//2使用非阻塞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";
}
如果您想对ftp\u nb\u put()
上传使用相同的内容,则必须将filesize($filename)
替换为ftp\u size($ftp2,$filename)
,其中$ftp2
必须是第二个相同的连接,用于请求远程文件的大小,因为ftp\u size()
在进行非阻塞传输时,将无法与您的主连接一起工作。这就是我如何残忍地使用phihag的代码来检查非阻塞上传速度的方法。当非阻塞传输正在进行时,您不能使用ftp\u size()
,因此您需要一个辅助连接。我正在显示当前速度、平均速度、经过的时间和估计的剩余时间
$primary_connection = ftp_connect($server);
$secondary_connection = ftp_connect($server);
$mode = FTP_BINARY;
$login = ftp_login($primary_connection, $ftp_user_name, $ftp_user_pass);
$login2 = ftp_login($secondary_connection, $ftp_user_name, $ftp_user_pass);
if (!$primary_connection || !$login) { die('Connection attempt failed!'); }
ftp_pasv($primary_connection,TRUE);
ftp_pasv($secondary_connection,TRUE);
$upload_status=ftp_nb_put($primary_connection, $destination_file, $source_file, $mode);
define('ALPHA', 0.2); // Weight factor of new calculations, between 0 and 1
$filesize=filesize($source_file);
$transferred = 0;
$rate = 0;
$time = microtime(true);
$start_time=$time;
while($upload_status == FTP_MOREDATA){
$upload_status = ftp_nb_continue($primary_connection);
$sizeNow=ftp_size($secondary_connection,$destination_file);
$sizeNowkB=$sizeNow/1024;
$timeNow = microtime(true);
$currentRate = ($sizeNow - $transferred) / ($timeNow - $time);
$currentkBRate = $currentRate / 1024;
$rate = ALPHA * $currentRate + (1 - ALPHA) * $rate;
$time = $timeNow;
$transferred = $sizeNow;
printf("Uploading file: %s",$source_file);
echo "<br>\n";
printf( "To be transferred: %0.2f kB", $filesize/1024);
echo "<br>\n";
printf( "Transferred: %0.2f kB", $sizeNowkB);
echo "<br>\n";
printf( "Current speed: %0.2f kB/s", $currentkBRate);
echo "<br>\n";
printf( "Average speed: %0.2f kB/s", $rate/1024);
echo "<br>\n";
$elapsed_time=$timeNow - $start_time;
printf( "Elapsed time: %0.2f s", $elapsed_time);
echo "<br>\n";
if($rate!=0){
$eta=$filesize/$rate - $elapsed_time;
}else{
$eta=0.0;
}
if($eta<=0){
$eta=0.0;
};
printf( "Estimated time left: %0.2f s", $eta);
echo "<br>\n";
}
$primary\u connection=ftp\u connect($server);
$secondary\u connection=ftp\u connect($server);
$mode=FTP\u二进制文件;
$login=ftp\u login($primary\u connection,$ftp\u user\u name,$ftp\u user\u pass);
$login2=ftp\u登录($secondary\u connection,$ftp\u user\u name,$ftp\u user\u pass);
if(!$primary_connection | |!$login){die('connection-truction-failed!');}
ftp_pasv($primary_connection,TRUE);
ftp_pasv($secondary_connection,TRUE);
$upload\u status=ftp\u nb\u put($primary\u connection,$destination\u file,$source\u file,$mode);
定义('ALPHA',0.2);//新计算的权重因子,介于0和1之间
$filesize=filesize($source\u file);
$transfered=0;
$rate=0;
$time=microtime(真);
$start_time=$time;
while($upload\u status==FTP\u MOREDATA){
$upload\u status=ftp\u nb\u continue($primary\u connection);
$sizeNow=ftp\u大小($secondary\u connection,$destination\u file);
$sizeNowkB=$sizeNow/1024;
$timeNow=微时间(真);
$currentRate=($sizeNow-$Transfer)/($timeNow-$time);
$currentkBRate=$currentRate/1024;
$rate=ALPHA*$currentRate+(1-ALPHA)*$rate;
$time=$timeNow;
$transfered=$sizeNow;
printf(“上载文件:%s”,$source\u文件);
回声“
\n”;
printf(“待传输:%0.2f kB”,$filesize/1024);
回声“
\n”;
printf(“已传输:%0.2f kB”,$sizeNowkB);
回声“
\n”;
printf(“当前速度:%0.2f kB/s”,$currentkBRate);
回声“
\n”;
printf(“平均速度:%0.2f kB/s”,$rate/1024);
回声“
\n”;
$Expased_time=$timeNow-$start_time;
printf(“已用时间:%0.2f s”,$已用时间);
回声“
\n”;
如果($rate!=0){
$eta=$filesize/$rate-$eassed\u time;
}否则{
$eta=0.0;
}
如果将文件大小除以第二个时间戳和第一个时间戳之间的差值,则得到的是每秒字节数,而不是每秒千字节数。非常正确,但基本上可以完成这项工作。我将详细说明。