К содержанию

Веб-разработка · PHP-модуль

Protected Downloads — управляемая выдача файлов с подтверждением и учётом скачиваний

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

PHP 8 · Bootstrap 5 · CSV-лог

Демо открывает список файлов. Презентация выдаётся самим модулем: сначала окно подтверждения, затем PDF по одноразовой ссылке.

Список документов в демонстрации Protected Downloads
Список файлов с датой последнего обновления

Задача бизнеса

На корпоративных сайтах нередко размещают прайс-листы, каталоги, коммерческие предложения и технические документы.

Обычная ссылка на файл не позволяет показать условия перед скачиванием, ограничить повторное использование выданной ссылки и вести понятный учёт обращений.

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

Решение

Модуль объединяет каталог доступных файлов, окно подтверждения, механизм выдачи по токенам и журналирование скачиваний.

Для каждого документа можно предусмотреть собственные параметры и пользовательские сообщения. Интерфейс адаптирован для использования с компьютера и телефона.

Как работает скачивание

  1. Посетитель выбирает документ в списке или переходит по прямой ссылке, которую прислал сотрудник.
  2. Если для документа включено подтверждение, модуль показывает окно с условиями или уведомлением. Для файлов без обязательного подтверждения скачивание начинается сразу.
  3. Пользователь подтверждает действие, и модуль формирует одноразовую ссылку с токеном.
  4. Модуль проверяет токен и состояние файла и отдаёт документ, не раскрывая его путь на сервере.
  5. Событие записывается в журнал. Повторный переход по той же ссылке возвращает пользователя к подтверждению.

Возможности

  • Настройка документов и условий выдачи: текст уведомления, подписи кнопок, обязательность подтверждения.
  • Подтверждение перед скачиванием с блокировкой кнопки от повторных нажатий.
  • Одноразовые токены с ограниченным сроком действия.
  • Журналирование загрузок и ошибок в CSV.
  • Информативные состояния ошибок: файл не найден, временно недоступен, некорректная или уже использованная ссылка.
  • Отображение даты последнего обновления файлов.
  • Скрытые документы, доступные только по прямой ссылке, и временное отключение файла.
  • Открытие HTML-документов прямо в браузере.
  • Адаптация под мобильные устройства.

Для каких задач подходит

  • Партнёрские прайс-листы и каталоги.
  • Коммерческие и технические материалы.
  • Документы, требующие подтверждения условий.
  • Учёт интереса к скачиваемым материалам.

Техническая реализация

Модуль написан на PHP 8 (совместим с PHP 7.4+), работает без базы данных и подключается к существующему сайту. Документы описываются в массиве конфигурации: путь к файлу, отображаемое название, требование подтверждения, скрытие из списка, временное отключение, тексты и оформление кнопок, открытие HTML в браузере.

Токен формируется при показе окна подтверждения и хранится в PHP-сессии посетителя. Он действует ограниченное время и удаляется после первого использования, поэтому повторный переход по ссылке или попытка открыть её в другой сессии возвращают к подтверждению.

Каждое обращение записывается в CSV-журнал: дата, IP-адрес, ключ файла, тип события (выдача файла, отсутствующий файл, неверная ссылка и другие), путь и User-Agent. Журнал открывается в Excel или Google Sheets. Интерфейс построен на Bootstrap 5.3 и Font Awesome.

Модуль управляет выдачей ссылок и фиксирует обращения, но не защищает уже скачанный файл от дальнейшего распространения.

Результат

Разработан работающий модуль для управляемой выдачи файлов на сайте. Он позволяет использовать разные сценарии подтверждения и скачивания, контролировать повторное применение ссылок и фиксировать обращения к документам.

Решение можно оценить в публичной демонстрации: выбрать файл, пройти пользовательский сценарий и посмотреть результат.

Технологии

  • PHP 8
  • Bootstrap 5.3
  • Font Awesome 6
  • CSV-лог
  • HTML5/CSS3

Обсудим похожую задачу?

Опишите контекст — предложу формат работы после разбора.

Написать

Обсудить проект

Имя и телефон или email — отвечу в рабочий день.

Достаточно одного канала связи.