| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > как работает антилич? |
| Автор: Hellka 6.4.2009, 20:37 |
| решил организовать скачку файлов за смс. никак не пойму алгоритм работы антилича. допустим у меня есть скрипт download.php а каждому файлу я делаю уникальную строку, например "eflkefjdifjdf46543424fef" передаю параметр скрипту download.php?key=eflkefjdifjdf46543424fef и что дальше? ну допустим по ключу я найду строку с данными файла в базе, как переадресовывать пользователя к файлу? header'ом? тогда, подозреваю, можно спалить абсолютный путь к файлу. и как сделать ссылку уникальной для каждого пользователя? как вариант думал прикреплять к уникальной строке зашифрованный id пользователя и потом проверять, а если сайт не требует регистрации? кидать что-то в куки или определять по ip? |
| Автор: bars80080 7.4.2009, 00:44 |
обычно скрипт, который анализирует входной ключ считывает файл и отправляет через себя с помощью функции readfile() зашифровать его id вместе с ключом. а точнее просто при выдаче ключа для пользователя в БД заводить запись, где будет указываться, какой пользователь может скачать (id его учётной записи или ip), и что за файл он может скачать. плюс ещё можно указать активное время, после которого ссылка будет удалена |
| Автор: Hellka 7.4.2009, 09:06 | ||
например сделаю только по ip, т.е. id пользователя нет, может возникнуть вариант, что ip сменился, а доступ всё еще нужен. хотя у меня тут же идейка возникла смешивать ключ файла + IP пользователя + код, который получает пользователь при смс-оплате. т.е. даже если ip сменился, то можно по коду поймать, но и код пользователь может отдать другому пользователю. тут уже не поймаешь. |
| Автор: Photon 7.4.2009, 21:38 | ||
| Есть ключ, время жизни ключа - скажем один час. При скачивании проверяем ключ, если он в порядке, то
Потому что проверять на то, чтоб мог скачать только один человек - это глупо. Человек с таким же успехом может скачанный файл отдать кому угодно. |
| Автор: 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 часов, то удаляет симлинк и запись о нём в базе. Метод испытан и проблем не вызывал. |
| Автор: 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/ |