Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ограничение скорости отдачи файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2010 - 20:56:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Выделено в отдельную тему из темы "Скорость скачивания"
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $speed=200; // в кб/с
  3. $path='./testfile.mp3';
  4. $size=filesize($path);
  5. $range_from=0;
  6. $range_to=filesize($path);
  7. header('HTTP/1.1 206 Partial Content');
  8. header('Accept-Range: bytes');
  9. header('Content-Length: '.($size-$range_from));
  10. header('Content-Range: bytes '.$range_from.'-'.($range_to).'/$size');
  11. header('Content-Disposition: inline; filename="filename"');
  12. header('Content-Type: audio/mpeg');
  13.                
  14. if ($file = fopen($path, 'rb')) {
  15.         @set_time_limit(0);
  16.         fseek($file, $range_from);                             
  17.         while(!feof($file) and (connection_status()==0) and ($cur_pos = ftell($file)) < $range_to+1) {
  18.                 print(fread($file, min(1024*$speed, $range_to + 1 - $cur_pos)));
  19.                 flush();
  20.                 if ($limit !== false) {
  21.                         sleep(1);
  22.                         }
  23.                 }
  24.         fclose($file);
  25.         @set_time_limit(30);
  26.         }      
  27. ?>


Отредактировано модератором: JustUserR, 20 Апреля, 2010 - 13:45:43
Ветка выделена в новую тему по причине подъема старой темы (Давности более 1,5 лет)
 
 Top
Viper
Отправлено: 20 Апреля, 2010 - 08:35:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Выделено в отдельную тему из темы "Скорость скачивания"
DeepVarvar хороший код... но проблема в том что при скачивании в несколько секций скорость увеличивается speed*section


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Апреля, 2010 - 09:45:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Выделено в отдельную тему из темы "Скорость скачивания"
Так и что нам стоит переделать???? ))))))))))))))))))
Сперва узнаем кол-во частей в файле по 102400 байт, учитывая что последняя может быть равной или меньше 102400. Отсюда вам равное смещение и ровная скорость...
(Добавление)
Кстати в моем текущем примере скорость из расчета что мой тестовый *mp3-файл весит 9,6 мб, не растет а падает с 206 кбпс до 200 ровно... Сижу пишу чтоб всегда была одинаковой...
 
 Top
JustUserR
Отправлено: 20 Апреля, 2010 - 13:53:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
Но проблема в том что при скачивании в несколько секций скорость увеличивается speed*section
Как решение можно поступить так - ограничивать скорость не на секцию а целиком для конкретного пользователя и скачиваемого им файла Остается только идентифицировать определеного пользователя - самое простое это ввести регистрацию но можно поступить и сложнее Отслеживать чисто по IP это конечно не лучший вариант (Ибо он бывает динамиский и еще хуже если NAT) - поэтому можно попробовать для каждого файла вести список скачиваемых секций с одного IP и определенного удаленного порта - и когда происходит запрос на новую секцию то можно вычислить этого же пользователя (Ведь он не будет качать одну и ту же секцию одновременно) и ограничить ему скорость пропорционально числу секцию Здесь это можно потому что вероятност скачки одних и тех же секций файла с одним и тем же запросом с одного IP очень мала


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB