Как создать динамическую ссылку для скачивания в PHP - PullRequest
2 голосов
/ 15 марта 2012

Есть ли способ, которым мы можем создать динамическую ссылку на скачивание в PHP для одного файла в течение некоторого периода времени или истечение срока действия ссылки на скачивание?После этого периода ссылка для скачивания изменится.

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

Может ли кто-нибудь помочь мне в этом.

Ответы [ 5 ]

5 голосов
/ 15 марта 2012

Одно решение:

  1. Создайте таблицу базы данных, в которой хранится большой уникальный идентификатор (случайный), а также имя / местоположение / содержимое файла для загрузки.Также укажите дату истечения срока действия.

    id                    | filename           | expires
    ----------------------+--------------------+--------------------
    fsdhfs7dfsniuf92un3f2 | secret.doc         | 2012-03-23 23:32:32
    sdf8shdf829nf32ufn23f | secret2.doc        | 2012-03-13 23:32:33
    
  2. Отправьте ссылку своему конечному пользователю по электронной почте ... Ссылка должна выглядеть примерно так:

    http://yoursie.com/download/fsdhfs7dfsniuf92un3f2
    
  3. Используйте правило перезаписи apache (mod_rewrite), которое захватит красивую ссылку и передаст ее на страницу PHP:

    RewriteEngine on
    RewriteRule ^/download/([a-z0-9]{20})$  /download.php?id=$1
    
  4. В этом сценарии download.php посмотритена $_GET['id'].Запустите запрос к базе данных, чтобы найти запись.Проверьте срок годности.Если все в порядке, тогда продолжайте.

  5. Либо используйте скрипт PHP для вывода правильных заголовков и загрузите файл, либо отправьте внутреннее перенаправление на внешний прокси-сервер, такой как nginx, которыйразгрузит процесс загрузки в nginx и не свяжет PHP с загрузкой.

В любом случае, у вас есть безопасная, истекающая ссылка, которую вы можете отправить своим конечным пользователям.

Берегите себя!

2 голосов
/ 15 марта 2012

Конечно, сохраните путь к файлу в базе данных вместе с уникальным идентификатором и отметкой времени истечения. Затем, когда пользователь получает доступ к ссылке с уникальным идентификатором в переменных get, проверьте метку времени и извлеките файл / отобразите ошибку соответственно.

0 голосов
/ 15 марта 2012
  1. Создайте на веб-сервере папку с файлом index.php, в котором говорится, что файл больше недоступен.
  2. Создайте файл .htaccess, указывающий на index.php, если необходимо.
  3. Добавьте файл, который вы хотите, чтобы люди загружали в папку на веб-сервере.
  4. Отправьте письмо со ссылкой.
  5. Когда вы почувствуете, что время истекло, удалите файл, и вместо этого люди перейдут на index.php.

Примечание: если вам нужно автоматизировать любой из этих способов, посмотрите на задания cron.

0 голосов
/ 15 марта 2012

вы можете установить базу данных, в которую вы положили свой файл, отметку времени и попадания в таблицу.Затем в вашем сценарии вы можете проверить отметку времени + 86400 * день (с 86400 - количество секунд в день).Если загрузка происходит в этот срок, она будет разрешена, в противном случае - нет.Затем вы можете вывести файл для загрузки с помощью readfile () и настроить кодировку с помощью вызовов header ().Для получения более конкретной помощи вам необходимо опубликовать код.

0 голосов
/ 15 марта 2012

Таблица базы данных:

идентификатор файл (вне общедоступного пути) истекает

Тогда есть скрипт get-file.php? Id = XXXXXX

<?not-real-code
Delete everything expired from table

Look up record for id=XXXXXXX

If exists then use something like readfile() to read and output file

Delete record in table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...