Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ограничение скорости скачивания
 
 автор: Брянский   (01.12.2009 в 02:59)   письмо автору
 
 

Здравствуйте.
Сегодня нашел функцию ограничения скорости скачивания файла.
Вот она:

<?
function file_download($filename$mimetype) {
// Задаем ограничение скорости закачки в байтах в секунду
// или ноль, если ограничений не требуется. 
// Другим способом задания этого параметра может быть его определение
// через константу, посредством функции define(), в этом случае значение
// будет неизменным для любого запуска скрипта. 
// Можно его значение задавать и снаружи функции исходя из каких-либо соображений, 
// например, роли пользователя или загрузки сервера, и получать его
// посредством директивы global.
  
$download_speed 100000// Около 25 килобайт в секунду.
// Задаём время дискретизации. С этой периодичностью клиенту будут отдаваться 
// блоки данных считываемые из файла.
  
$time_discret 1;
  if (
file_exists($filename)) {
    
header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
    
header('Content-Type: ' $mimetype);
    
header('Last-Modified: ' gmdate('r'filemtime($filename)));
    
header('ETag: ' sprintf('%x-%x-%x'fileinode($filename), filesize($filename), filemtime($filename)));
    
header('Content-Length: ' . (filesize($filename)));
    
header('Connection: close');
    
header('Content-Disposition: attachment; filename="' basename($filename) . '";');
    
$f=fopen($filename'r');
// Проверяем задано ли ограничение скорости
    
if((int) $download_speed 0) {
      while(!
feof($f)) {
// Включаем таймер
        
$time_start microtime(true);
// Читаем блок данных, которых мы должны отдать за время дискретизации
        
echo fread($fceil($download_speed*$time_discret));
        
flush();
// Находим время за которое наши данные отправлены
        
$time_end microtime(true);
        
$time $time_end $time_start;
// Если время, оставшееся до конца времени дискретизации больше нуля,
// то приостанавливаем выполнение скрипта на величину этого времени в микросекундах.
        
if($time_discret-$time 0usleep(($time_discret-$time)*1000000);
      }
    }
    else {
// Если у нас не задано ограничение скорости, то выполняем старый вариант кода
      
while(!feof($f)) {
        echo 
fread($f1024);
        
flush();
      }
    }
    
fclose($f);
  } else {
    
header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    
header('Status: 404 Not Found');
  }
  exit;
}
?>


Вобщем когда в ней ставлю ограничение в 100 кб/с, то скорость потихоньку набирается.
Собственно вопрос:
как тут сделать так, чтобы сразу и начало качать со скорости 100 кб/с ?
P.S. Заранее большое спасибо!

  Ответить  
 
 автор: Брянский   (01.12.2009 в 14:33)   письмо автору
 
   для: Брянский   (01.12.2009 в 02:59)
 

никто незнает как сделать так, чтобы сразу и начало качать со скорости 100 кб/с ?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования