Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как работает антилич?


Автор: Hellka 6.4.2009, 20:37
решил организовать скачку файлов за смс.
никак не пойму алгоритм работы антилича.
допустим у меня есть скрипт download.php
а каждому файлу я делаю уникальную строку, например "eflkefjdifjdf46543424fef"
передаю параметр скрипту download.php?key=eflkefjdifjdf46543424fef
и что дальше? ну допустим по ключу я найду строку с данными файла в базе, как переадресовывать пользователя к файлу? header'ом? тогда, подозреваю, можно спалить абсолютный путь к файлу.

и как сделать ссылку уникальной для каждого пользователя? как вариант думал прикреплять к уникальной строке зашифрованный id пользователя и потом проверять, а если сайт не требует регистрации? кидать что-то в куки или определять по ip?

Автор: bars80080 7.4.2009, 00:44
Цитата(Hellka @  6.4.2009,  20:37 Найти цитируемый пост)
как переадресовывать пользователя к файлу?

обычно скрипт, который анализирует входной ключ считывает файл и отправляет через себя с помощью функции readfile()


Цитата(Hellka @  6.4.2009,  20:37 Найти цитируемый пост)
как сделать ссылку уникальной для каждого пользователя?

зашифровать его id вместе с ключом. а точнее просто при выдаче ключа для пользователя в БД заводить запись, где будет указываться, какой пользователь может скачать (id его учётной записи или ip), и что за файл он может скачать. плюс ещё можно указать активное время, после которого ссылка будет удалена

Автор: Hellka 7.4.2009, 09:06
Цитата(bars80080 @ 7.4.2009,  00:44)
зашифровать его id вместе с ключом. а точнее просто при выдаче ключа для пользователя в БД заводить запись, где будет указываться, какой пользователь может скачать (id его учётной записи или ip), и что за файл он может скачать. плюс ещё можно указать активное время, после которого ссылка будет удалена

например сделаю только по ip, т.е. id пользователя нет, может возникнуть вариант, что ip сменился, а доступ всё еще нужен.

хотя у меня тут же идейка возникла смешивать ключ файла + IP пользователя + код, который получает пользователь при смс-оплате. т.е. даже если ip сменился, то можно по коду поймать, но и код пользователь может отдать другому пользователю. тут уже не поймаешь.

Автор: Photon 7.4.2009, 21:38
Есть ключ, время жизни ключа - скажем один час.
При скачивании проверяем ключ, если он в порядке, то 

Код

header('Content-Type: нужный_тип_файла');
echo file_get_content('путь_и_имя_файла');


Потому что проверять на то, чтоб мог скачать только один человек - это глупо. Человек с таким же успехом может скачанный файл отдать кому угодно.

Автор: SneG0K 7.4.2009, 22:40
а как тогда делается докачка?

Автор: enof 7.4.2009, 22:53
SneG0K, 
заголовки Accept-Ranges & Range & Content-Range & Content-Lenght

Автор: awers 8.4.2009, 01:13
Только что проверил поиск по форуму - работает. Искать по разделам пхп (ключевое слова "Докачка")

Автор: IZ@TOP 8.4.2009, 12:19
Для этих нужд есть http://www.google.ru/search?q=x-accel-redirect. Хотя, если у Вас ###ый хостинг без возможности самостоятельной настройки - этот вариант Вам не подойдет.

Автор: skyboy 9.7.2010, 15:37
столкнулся с этим и хочу немного развернуть ответ IZ@TOP'a.
надо использовать nginx или lighttpd в качестве фронтенда или даже основного сервера. 
в таком случае, если из PHP к вебсерверу будет проходить определенный заголовой(X-Accel-Redirect - nginx, X-SendFile - lighttpd), то вебсервер возьмет на себя раздачу файла. В том числе и управление докачкой.
Немало прояснила статья с http://www.opennet.ru/base/net/nginx_x_accel_redirect.txt.html. А в эту тему отписал потому, что хоть она и старая, но самая свежая на форуме по теме "антилича". 

Автор: AXS 9.7.2010, 16:03
Простой и надёжный метод в том что по запросу пользователя на скачку скрипт создаёт симлинк (название = хэш таймштампа) в определённой папке (например /downloads/) и заносит его в БД вместе со временем создания. Полученую ссылку показывает пользователю.
Потом крон раз в час (тут по вкусу) запускает скрипт, который пробегает по таблице с этими симлинками и проверяет время создания симлинка и если он старше скажем 24 часов, то удаляет симлинк и запись о нём в базе.

Метод испытан и проблем не вызывал. smile

Автор: skyboy 11.7.2010, 12:05
кстати, http://modules.apache.org/search.php?id=1143 и под Apache 2.x. Наверное, использование ускорения закачки без использования скоростного фронтенда(nginx, lighttpd) со своими реализациями x_sendfile, немного озадачит, но ведь http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)