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

Разное

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

 

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

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

тема: Передача файла через header
 
 автор: Sasha   (29.03.2006 в 19:23)   письмо автору
 
 

Вот думал как сделать защиту файлов, и сделал передачу файла из защищённой директории через header, с проверкой реферера. Но дело не в том, меня заинтересовало создаёт ли такой способ передачи большую нагрузку на хостинг, чем скачивание файла по прямой ссылке или наоборот меньшую?

   
 
 автор: Sasha   (30.03.2006 в 12:06)   письмо автору
 
   для: Sasha   (29.03.2006 в 19:23)
 

никто не знает?

   
 
 автор: Trianon   (30.03.2006 в 12:38)   письмо автору
 
   для: Sasha   (29.03.2006 в 19:23)
 

Очень туманно сформулированный вопрос. Поподробнее бы.
Какая имеется проблема.
Какие варианты её решения найдены.
По каким критериям следует оптимизировать нагрузку.

   
 
 автор: Sasha   (30.03.2006 в 18:33)   письмо автору
 
   для: Trianon   (30.03.2006 в 12:38)
 

Имеется много видеофайлов, которые постоянно скачивают :)
И вот захотелось, чтоб их качали только с моего сайта, а не с других. Положил я скрипт, который при запросе файла проверяет реферер, и если всё ок, берёт видеофайл из запроленой папки в переменную, и отдаёт через header.
Получилось, что если пользуешся менеджером закачек, то закачка идёт в один поток и докачка неподдерживается.

Вот мне и интересно, такой способ передачи файла создаёт большую или меньшую нагрузку на хостинг, чем закачка его по прямой ссылке (например в 5 потоков)??

Я в этом не разбираюсь, но вот думаю....сейчас качая 5 файлов мы имеем 5 потоков + грузим php и апач....а качая по прямой ссылке мы, скажем, имеем 25 потоков и грузим только апач.

Просто хочется минимизировать нагрузку, чтоб с хостинга не выперли... :))

   
 
 автор: Trianon   (30.03.2006 в 18:48)   письмо автору
 
   для: Sasha   (30.03.2006 в 18:33)
 

Как именно отдает?
header("Location: xxxxxxxxxxxxxxxxxxx.avi");
или
header("Content-Type: application/octet-stream");
echo file_get_contents(...);
Если последнее - я вообще не понимаю, как у Вас видеофайл в переменную влезает.

   
 
 автор: Unkind™   (30.03.2006 в 19:04)   письмо автору
 
   для: Trianon   (30.03.2006 в 18:48)
 

Нет ну видеофайл это тоже какая-то информация...Главное как ее "прочитать"...

   
 
 автор: Sasha   (30.03.2006 в 20:14)   письмо автору
 
   для: Unkind™   (30.03.2006 в 19:04)
 

Как последнее....плохо да?


Через header("Location: xxxxxxxxxxxxxxxxxxx.avi"); не отдаёт файл с запароленой папки :(

   
 
 автор: Trianon   (30.03.2006 в 20:48)   письмо автору
 
   для: Sasha   (30.03.2006 в 20:14)
 

А если создать для этого файла имя в виде случайного набора символов, привязанное к сессии, и Location делать на это имя?

   
 
 автор: Sasha   (30.03.2006 в 22:27)   письмо автору
 
   для: Trianon   (30.03.2006 в 20:48)
 

Тоесть переименовывать файл при каждом запросе к нему?

   
 
 автор: Trianon   (31.03.2006 в 10:57)   письмо автору
 
   для: Sasha   (30.03.2006 в 22:27)
 

Я имел в виду link(), а не rename()

   
 
 автор: Sasha   (31.03.2006 в 11:49)   письмо автору
 
   для: Trianon   (31.03.2006 в 10:57)
 

а можно здесь поподробнее
Мы создаём ссылку со случайным именем, а как к нему привязать конкретный файл?

   
 
 автор: Trianon   (31.03.2006 в 12:10)   письмо автору
 
   для: Sasha   (31.03.2006 в 11:49)
 

link($file, $randomname);
Возможно, достаточно будет символической:
symlink($file, $randomname);
Но в последнем я не уверен. Нужно проверять.

   
 
 автор: Sasha   (31.03.2006 в 16:43)   письмо автору
 
   для: Trianon   (31.03.2006 в 12:10)
 

Если честно, то я не понимаю...
Чтоб дать случайную ссылку, нужно присвоить файлу это случайное имя. Но тут опять же без выдачи через php не обходится....
Может какой пример есть?

   
 
 автор: Trianon   (31.03.2006 в 17:05)   письмо автору
 
   для: Sasha   (31.03.2006 в 16:43)
 

Одно дело - отдать ссылку (даже не ссылку, а перекинуть на новое Location) через php. И совсем другое - толкать через php весь файл.

   
 
 автор: Sasha   (01.04.2006 в 21:34)   письмо автору
 
   для: Trianon   (31.03.2006 в 17:05)
 

Может есть какой пример такого действа?

   
 
 автор: AKiRA   (31.03.2006 в 00:17)   письмо автору
 
   для: Trianon   (30.03.2006 в 20:48)
 

Ищите на форуме мой скриптик antileech там показано как реализовать блокировку скачки с чужого домена или не авторизированного пользователя.

   
 
 автор: Sasha   (31.03.2006 в 01:32)   письмо автору
 
   для: AKiRA   (31.03.2006 в 00:17)
 

Дело в том, что пройдя один раз через такой скрипт, я получаю прямой путь к файлу, и уже могу обращаться по нему. А вот этого и нехотелось бы....

   
 
 автор: Loki   (31.03.2006 в 10:00)   письмо автору
 
   для: Sasha   (31.03.2006 в 01:32)
 

Не можете. Скачайте - посмотрите.

   
 
 автор: Sasha   (31.03.2006 в 11:18)   письмо автору
 
   для: Loki   (31.03.2006 в 10:00)
 

А как это можно использовать (если можно) без БД. Передаём просто имя файла в переменной (?video=vasya) к нему в скрипте добавляем расширение и забираем с соседней папки. У меня что-то не получается, приходит файл в 132 байта.

Сейчас я использую такую конструкцию

$url = @$_SERVER["HTTP_REFERER"]; // Реферер откуда пришел человек.
  @preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches); // www адрес
  @$host = $matches[2];
  @preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); // хост реферера
  @$domain = $matches[0];
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $_SERVER["HTTP_HOST"], $matches); // тукущий хост
  $now_domain = $matches[0];
  if ($now_domain === $domain) {
    // Осуществляем редирект на URL 
$file = "box/".$_GET['url']; 
$str="Content-Disposition: attachment; filename=" .$_GET['url']; 
header($str); 
header("Content-type: application/octet-stream");
echo file_get_contents ($file); 
 } else { // Если нет, отправляем на стартовую страницу
    header("Location: index.php");
  }

?> 



изменить под get_file($_GET['id']); не получается что-то :(

   
 
 автор: Trianon   (31.03.2006 в 10:57)   письмо автору
 
   для: AKiRA   (31.03.2006 в 00:17)
 

Честно поискал. Не обнаружил.

   
 
 автор: Sasha   (31.03.2006 в 11:20)   письмо автору
 
   для: Trianon   (31.03.2006 в 10:57)
 

Сам скрипт вот

http://www.softtime.ru/forum/files/9566-20051119124252.txt

   
 
 автор: Trianon   (31.03.2006 в 11:46)   письмо автору
 
   для: Sasha   (31.03.2006 в 11:20)
 

(to Loki: Спасибо!)

Да, я глянул на скрипт Akira. Конечно, он не хватает тело файла в переменную, но всё же весь траффик прёт через PHP-модуль. К нему даже несложно дописать Accept-Ranges - докачку.
Но я то думал, как сделать чтоб целевым трафиком распоряжался сам апач без привлечения слоя PHP.

   
 
 автор: Sasha   (31.03.2006 в 11:51)   письмо автору
 
   для: Trianon   (31.03.2006 в 11:46)
 

Ну это просто идеальный вариант :))

   
 
 автор: Loki   (31.03.2006 в 11:21)   письмо автору
 
   для: Trianon   (31.03.2006 в 10:57)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=9566&page=1

   
 
 автор: AKiRA   (30.03.2006 в 23:48)   письмо автору
 
   для: Sasha   (29.03.2006 в 19:23)
 

:)

   
Rambler's Top100
вверх

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