|
|
|
| Вот думал как сделать защиту файлов, и сделал передачу файла из защищённой директории через header, с проверкой реферера. Но дело не в том, меня заинтересовало создаёт ли такой способ передачи большую нагрузку на хостинг, чем скачивание файла по прямой ссылке или наоборот меньшую? | |
|
|
|
|
|
|
|
для: Sasha
(29.03.2006 в 19:23)
| | никто не знает? | |
|
|
|
|
|
|
|
для: Sasha
(29.03.2006 в 19:23)
| | Очень туманно сформулированный вопрос. Поподробнее бы.
Какая имеется проблема.
Какие варианты её решения найдены.
По каким критериям следует оптимизировать нагрузку. | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 12:38)
| | Имеется много видеофайлов, которые постоянно скачивают :)
И вот захотелось, чтоб их качали только с моего сайта, а не с других. Положил я скрипт, который при запросе файла проверяет реферер, и если всё ок, берёт видеофайл из запроленой папки в переменную, и отдаёт через header.
Получилось, что если пользуешся менеджером закачек, то закачка идёт в один поток и докачка неподдерживается.
Вот мне и интересно, такой способ передачи файла создаёт большую или меньшую нагрузку на хостинг, чем закачка его по прямой ссылке (например в 5 потоков)??
Я в этом не разбираюсь, но вот думаю....сейчас качая 5 файлов мы имеем 5 потоков + грузим php и апач....а качая по прямой ссылке мы, скажем, имеем 25 потоков и грузим только апач.
Просто хочется минимизировать нагрузку, чтоб с хостинга не выперли... :)) | |
|
|
|
|
|
|
|
для: Sasha
(30.03.2006 в 18:33)
| | Как именно отдает?
header("Location: xxxxxxxxxxxxxxxxxxx.avi");
или
header("Content-Type: application/octet-stream");
echo file_get_contents(...);
Если последнее - я вообще не понимаю, как у Вас видеофайл в переменную влезает. | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 18:48)
| | Нет ну видеофайл это тоже какая-то информация...Главное как ее "прочитать"... | |
|
|
|
|
|
|
|
для: Unkind™
(30.03.2006 в 19:04)
| | Как последнее....плохо да?
Через header("Location: xxxxxxxxxxxxxxxxxxx.avi"); не отдаёт файл с запароленой папки :( | |
|
|
|
|
|
|
|
для: Sasha
(30.03.2006 в 20:14)
| | А если создать для этого файла имя в виде случайного набора символов, привязанное к сессии, и Location делать на это имя? | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 20:48)
| | Тоесть переименовывать файл при каждом запросе к нему? | |
|
|
|
|
|
|
|
для: Sasha
(30.03.2006 в 22:27)
| | Я имел в виду link(), а не rename() | |
|
|
|
|
|
|
|
для: Trianon
(31.03.2006 в 10:57)
| | а можно здесь поподробнее
Мы создаём ссылку со случайным именем, а как к нему привязать конкретный файл? | |
|
|
|
|
|
|
|
для: Sasha
(31.03.2006 в 11:49)
| | link($file, $randomname);
Возможно, достаточно будет символической:
symlink($file, $randomname);
Но в последнем я не уверен. Нужно проверять. | |
|
|
|
|
|
|
|
для: Trianon
(31.03.2006 в 12:10)
| | Если честно, то я не понимаю...
Чтоб дать случайную ссылку, нужно присвоить файлу это случайное имя. Но тут опять же без выдачи через php не обходится....
Может какой пример есть? | |
|
|
|
|
|
|
|
для: Sasha
(31.03.2006 в 16:43)
| | Одно дело - отдать ссылку (даже не ссылку, а перекинуть на новое Location) через php. И совсем другое - толкать через php весь файл. | |
|
|
|
|
|
|
|
для: Trianon
(31.03.2006 в 17:05)
| | Может есть какой пример такого действа? | |
|
|
|
|
|
|
|
для: Trianon
(30.03.2006 в 20:48)
| | Ищите на форуме мой скриптик antileech там показано как реализовать блокировку скачки с чужого домена или не авторизированного пользователя. | |
|
|
|
|
|
|
|
для: AKiRA
(31.03.2006 в 00:17)
| | Дело в том, что пройдя один раз через такой скрипт, я получаю прямой путь к файлу, и уже могу обращаться по нему. А вот этого и нехотелось бы.... | |
|
|
|
|
|
|
|
для: Sasha
(31.03.2006 в 01:32)
| | Не можете. Скачайте - посмотрите. | |
|
|
|
|
|
|
|
для: 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']); не получается что-то :( | |
|
|
|
|
|
|
|
для: AKiRA
(31.03.2006 в 00:17)
| | Честно поискал. Не обнаружил. | |
|
|
|
|
|
|
|
|
для: Sasha
(31.03.2006 в 11:20)
| | (to Loki: Спасибо!)
Да, я глянул на скрипт Akira. Конечно, он не хватает тело файла в переменную, но всё же весь траффик прёт через PHP-модуль. К нему даже несложно дописать Accept-Ranges - докачку.
Но я то думал, как сделать чтоб целевым трафиком распоряжался сам апач без привлечения слоя PHP. | |
|
|
|
|
|
|
|
для: Trianon
(31.03.2006 в 11:46)
| | Ну это просто идеальный вариант :)) | |
|
|
|
|
|
|
|
|
для: Sasha
(29.03.2006 в 19:23)
| | :) | |
|
|
|