Эта тема на forum.dklab.ru


Klauzu: Antileech - отдача большого кол-ва файлов через file_get_contents/fread
Добрый день.

Написал antileech на уровне PHP, он делает немного больше, чем просто проверка реферера, в зависимости от запрошенной картинки, скрипт проверяет принадлежит ли картинка той странице, которая подаётся в качестве реферера и ещё парочка уникальных (для архитектуры проекта) проверок. Но, собственно, суть не в этом. В случае успешной проверки, запрошенный файл отдаётся через file_get_contents. И выводится скриптом, примерно так:

header("Content-type: image/jpeg");
header("Cache-control: public");
echo file_get_contents($requested_picture);


Сейчас всё работает хорошо, но планируется, что в сутки будет отдаваться 100К-500К файлов, в среднем по 10-12 одновременных запросов файла. И вот тут вопрос - насколько отдача файла через file_get_contents адекватна, не будет ли он чрезмерно тормозить/нагружать сервер, есть оперативку?
Может, стоит использовать что-то другое? (В сети все примеры, которые нашёл, работают таким способом).
kernel32:
Грузить сервер и оперативку, конечно, будет, но более адекватного способа выдать катинку посредством скрипта PHP я не знаю.
З.Ы. Проверять реферер не есть хорошо...
WingedFox:
З.Ы. Проверять реферер не есть хорошо...
Правильнее сказать -- полезно.
Как, впрочем, и любые заголовки, приходящие от пользователя.
Klauzu:
kernel32
Хм..., а почему? Именно в отношении антилича нехорошо? или есть более подходящий способ?
kernel32:
Klauzu, 1. любые заголовки запроса можно подменить; 2. есть файрволы, которые намеренно фильтруют заголовки запроса и убирают HTTP_REFERER (или заменяют его на какую-нибудь строку)
Klauzu:
kernel32
1. Да, это, конечно же, я знаю. Цель - не запрещать скачивать через download-менеджеры или скрипты с указанием правильного реферера, цель - избежать прямого антилича, размещения картинки на сторонних сайтах в виде <img src="http://www.site.ru/pics/smth.jpg" />. Но даже при таком раскладе, мне было бы интересно и полезно знать ваше мнение, т.е. какой способ Вы хотите предложить?

2. Тут, как я понимаю, ничего не поделаешь, т.к. жертвовать гигами трафика и, соответственно, деньгами за счёт не очень большого числа проблемных посетителей (до сих пор такой проблемы не встречал вовсе, основные проблемы, с которыми сталкиваются юзеры при даунлоаде - прямая скачка по ссылкам без реферера через браузер или доунлоад менеджер). Но, если это проблему можно решить, не избавившись от функции антилича, то тоже было бы интересно узнать как.
Iced:
АФФтар, погоди, а ты уверен, что код
echo file_get_contents($requested_picture);
будет работать эФФективно?
Что будет, если у тебя с сайта попытаются стянуть файлик в мегов 100? Не получит ли пользователь ошибку о нехватке памяти? :)
IMHO, может лучше:
readfile($requested_picture);
?
WingedFox:
Вариантов море. Как пример:
1. анализировать логи, качали ли статью до картинки
2. цеплять SESSION_ID к картинке и проверять его наличие
3. все картинки отдавать по динамическим именам
и так далее, с различной степенью извращённости =)

Эта тема на forum.dklab.ru