Для чего нам нужно скрыть URL скачиваемого файла от сниффера? Ну, например есть коммерческий софт, доступ к файлам которого должны получать только заказчики/покупатели его оплатившие.
Заказчик/покупатель оплачивает товар и получает ссылку с уникальным ИД для загрузки файла. Далее, после 2-3 загрузок ссылка должна "умирать", а истинный URL должен остаться неизвестен даже при использовании снифера. В противном случае файл будут "дёргать" все кому не лень.
Примерно вот в таких ситуациях нам и потребуется скрыть URL файла не только от самого клиента, но и от разного рода снифферов и анализаторов Интернет-трафика.
В случае с РНР, скрыть URL загрузки файла, нам помогут такие функции как header()
, basename()
и readfile()
:
<?php // Полный путь к файлу // Директория /download/ от доступа извне защищена файлом .htaccess // Фактически директорию /download/ можно вынести за пределы /public_html/ $filePath = '/var/www/example.com/public_html/download/test.zip'; // Не кэшировать данные header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private', false); // MIME type: https://www.iana.org/assignments/media-types/media-types.xhtml header('Content-Type: application/zip'); // Предлагаем сохранить header('Content-Disposition: attachment; filename="' . basename($filePath) . '";'); // Режим передачи данных header('Content-Transfer-Encoding: binary'); // Длина (размер) содержимого header('Content-Length: ' . filesize($filePath)); // Время выполнения скрипта (0 = неограниченно) set_time_limit(120); // Читаем файл и пишем его в буфер вывода readfile("$filePath"); exit;
Вот и все премудрости. Миссия "Узнать реальный URL скачиваемого файла" невыполнима.
Как реализовать сам интерфейс выдачи файла, путём прямого обращения к скрипту или через отдельную форму, - это уже дело личного вкуса, рабочего окружения и поставленных задач. Если ссылки с уник.
Если уник. ссылки для скачивания файла предполагается отправлять по эл. почте, то вероятно лучше будет отправлять один лишь ИД, который пользователь после должен будет вставить в форму на сайте и нажать "Скачать" ибо по ссылкам могут бродить почтовые боты, принадлежащие почтовым провайдерам или даже спец. службам, сканирующие входящие письма, а значит уник. ссылка для загрузки может быстро сгореть и конечный потребитель не получит свой файл.