Я написал скрипт, который дает вам возможность загружать файл с максимальной скоростью файла, которую я разрешаю, однако, когда я разрешаю «неограниченную» скорость, например, 10000 КБ/с, ftell работает странно, он ведет себя так, как будто он загружается со скоростью 10000 кбит/с, что неверно, и я не могу делать вычисления в базе данных, такие как оставшееся время, текущая скорость загрузки и т. д.PHP Загрузить файл, ограничить максимальную скорость и рассчитать скорость загрузки
Так браузер загружает файл через некоторое время, но в базе данных он уже похож на «загружен», как я могу сделать некоторые расчеты точности, даже если установить неограниченную скорость, чтобы пользователь мог загрузить файл со скоростью сети, а значения базы данных также учитываются его скоростью сети, а не ftell();
который зависит от $download_rate;
...?
Заранее благодарен!
<?php
while(!feof($fopen)) {
//echo fread($fopen, 4096);
$this->get_allowed_speed_limit($download_rate);
//$download_rate = 350;
print fread($fopen, round($download_rate * 1024));
sleep(1); //needed for download speed limit
if(connection_status() != 0 || connection_aborted()) {
$bytes_transferred = ftell($fopen);
if($bytes_transferred < $bytes) {
//CANCELLED
$this->download_unsuccessfull($file_name);
} else {
//CANCELLED (but gets executed only on strange networks like eduroam in CZE)
$this->download_unsuccessfull($file_name);}
flush();
die;
} else {
$progress = ftell($fopen)/$bytes * 100;
if($progress >= 100) {
//DONE
$this->download_successfull($file_name);
flush();
} else {
//DOWNLOADING
if(ftell($fopen) != 0) {
$bytes_transferred = ftell($fopen);
$time_end = microtime(true);
$time = $time_end - $time_start;
$dl_speed = floor(($bytes_transferred/$time)/1000);
///////HERE THE CALCULATIONS ARE TOTALLY WRONG, BECAUSE IT ALL DEPENDS ON THE INPUT OF $download_rate;
mysqli_query($con, "UPDATE `download_meter` SET `current_speed` = '".mysqli_real_escape_string($con, $bytes_transferred)."'");
$this->update_active_downloads($file_name, $bytes_transferred, $dl_speed);
}
flush();
}
}
//Activate this for delay download.
//flush();
//sleep(1);
}
?>
Я не думаю, что сервер может узнать скорость загрузки клиента. Возможно, на веб-сервере, но не на PHP. Может быть, проверить клиента с JS? – Rudie
Как серверы fileshare предлагают файлы клиенту с ограничением скорости? –
Вы хотите ограничить скорость загрузки? Это не должно быть сложно. Я думал, ты хочешь это измерить. И вы действительно сравниваете свои обширные навыки PHP с профессиональным файловым сервером SERVER? Да, они могут это сделать. – Rudie