2012-03-15 3 views
2

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

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

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

+0

Вы много просите здесь. Есть ли определенный код, с которым вы боретесь? Если вы просто хотите знать, может ли php делать все это, да, это возможно. – user783322

+0

Я описал 5 шагов ниже, что вы можете следить, чтобы получить действительно хорошее решение на месте. Вы должны прочитать документы и выяснить детали, но не стесняйтесь комментировать мой ответ для более подробной информации. – gahooa

ответ

5

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

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

    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. Используйте правило апача перепишем (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 с загрузкой ,

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

Позаботьтесь!

+0

Да, добавление ссылки истекает через таблицу базы данных, работает хорошо ... Но есть ли способ понять, что входящая ссылка на скачивание связана с определенным электронным письмом, если пользователь нажал эту ссылку с адреса электронной почты – user434509

+0

@ user434509: добавьте адрес электронной почты для таблицу db и создать уникальную ссылку для каждого отправляемого вами адреса электронной почты. – gahooa

2

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

0

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

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

Тогда есть сценарий 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 
0

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

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

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

Смежные вопросы