PDA

Просмотр полной версии : [Без оффтопа] PHP и веб-технологии — вопросы, советы, решения


JackDaniels
22.04.2012, 21:55
Давайте тут делиться опытом, спрашивать, советовать и т. д. т. п..


Вопрос номер «раз»

Задача — На сервере лежит файл (большой, 2-3 Гига), на сайте стоит на него ссылка для скачивания.


Как сделать, чтобы:

1. Гости не могли скачать файл, только зарегистрированные пользователи после авторизации.

2. Нельзя было скачивать этот файл, по ссылке размещенной на стороннем сайте.
(Скрывать реальный адрес, запрещать туда дуступ…)

3. Можно было учитывать количество скачиваний.

4. Можно было добавлять файл в менеджер закачек, например Folx, FlashGet и так далее, желательно с докачкой.

Вариант редиректа хидером отпадает, так как «светится» реальная папка, где хранятся файлы и прямой адрес.
Вариант с выкачкой через PHP отбросил из-за предположительно большой нагрузки на сервер.

Как обмануть судьбу?

Denis Shlyapnikov
22.04.2012, 22:36
Вроде делается так:
Запоминается состав юзер агента, по нему генерируется временная ссылка, реврайт уже разруливает что надо. Таким способом реальная папка светиться не будет.

Denis Shlyapnikov
22.04.2012, 22:52
Хотя такой вариант сразу откосит программы - качалки

JackDaniels
22.04.2012, 23:02
Хотя такой вариант сразу откосит программы - качалки

Да и хлопот много с этим.

Denis Shlyapnikov
22.04.2012, 23:15
Вроде известные крупные файло-обменники запоминают подсеть IP адресов.
Ссылку генерируют (тут наверное уже не важно каким способо), пихают ее опять же в семи любимый реврайт (а куда ж еще). Ссылка работает ограниченное время, но в вашем случае как я понял у нее время жизни безлимитное должно быть? И скачивать может только тот пользователь, который был авторизован в тот момент?

JackDaniels
23.04.2012, 00:11
в вашем случае как я понял у нее время жизни безлимитное должно быть? И скачивать может только тот пользователь, который был авторизован в тот момент?
Да, доступ должен зависть только от прав пользователя и авторизации, но ни как не от адреса или времени.

DarkUser
23.04.2012, 01:36
Да, доступ должен зависть только от прав пользователя и авторизации, но ни как не от адреса или времени.FTP?

JackDaniels
23.04.2012, 01:46
Да, доступ должен зависть только от прав пользователя и авторизации, но ни как не от адреса или времени.FTP?

Нет.

Rooslan Khayrov
23.04.2012, 11:07
Заголовок X-Sendfile для Apache (с mod_xsendfile) и Lighttpd, X-Accel-Redirect для nginx. Поддержку Range, ETag, If-Modified-Since и т.д. веб-сервер берёт на себя. Внутренний путь нигде не светится, просто вместо вывода скрипта после заголовков выплёвывается содержимое файла с помощью системного вызова sendfile (по возможности, но где сейчас найти систему без его поддержки).

JackDaniels
23.04.2012, 14:04
Заголовок X-Sendfile для Apache (с mod_xsendfile) и Lighttpd, X-Accel-Redirect для nginx. Поддержку Range, ETag, If-Modified-Since и т.д. веб-сервер берёт на себя. Внутренний путь нигде не светится, просто вместо вывода скрипта после заголовков выплёвывается содержимое файла с помощью системного вызова sendfile (по возможности, но где сейчас найти систему без его поддержки).

Огромное спасибо за X-Sendfile — идеальное и элегантное решение.