ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 11.08.2009, 10:36
Аватар для dr.5y51em
dr.5y51em
Новичок
Регистрация: 03.08.2009
Сообщений: 4
Провел на форуме:
3269

Репутация: 4
По умолчанию

Щас полетят маты в мою сторону, но безопаснее всего выдавать через PHP. Хотя очень сильно напрягает сервер. Скрипт не мой, где спёр не помню, но мне оч. нравиться что можно скорость отдачи контролировать... В общем вот.

PHP код:
function file_download($filename$mimetype='application/octet-stream') {
// Задаем ограничение скорости закачки в байтах в секунду
// или ноль, если ограничений не требуется.
// Другим способом задания этого параметра может быть его определение
// через константу, посредством функции define(), в этом случае значение
// будет неизменным для любого запуска скрипта.
// Можно его значение задавать и снаружи функции исходя из каких-либо соображений,
// например, роли пользователя или загрузки сервера, и получать его
// посредством директивы global.
  
$download_speed 25000// Около 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;
}
file_download('ИМЯ_ФАЙЛА'); 
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большой архив статей по раскрутке и оптимизации сайтов _-Ramos-_ Статьи 12 13.06.2010 23:56
Халявный Интернет (для маленьких) stopxaker Статьи 91 20.04.2010 19:52
Халявный интернет или как спрятаться надежнее чем VPN или SSH с цепочкой соксов. kodzero Статьи 16 16.11.2009 20:23
TRUE PHP-injection Zadoxlik Уязвимости 14 27.11.2006 18:19



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ