Всем привет.
Сегодня я хочу поделиться с вам классным скриптом, генерирующим уникальные ссылки на скачивание файла.
Чтобы сделать для ваших пользователей уникальные ссылки вам понадобится только немного магии и php.
Поехали!
//имя файла
$file = 'file_name.zip';
//текущее время + 24 часа т.е. сколько будет активной ссылка
$time = strtotime('+24 hours');
//уникальный идентификатор
$key = sha1($time.$file);
//Теперь эти данный мы передаем скрипту обработчику, например, так
echo '<a href="http://example.com/'.$key.'/'.$time.'/'.$file.'">скачать</a>';
В .htaccess настраиваем правила для обработки подобных ссылок специальным скриптом, а в нем пишем примерно такой код для обработки.
$now = time();
$file_name = "file_name.zip";
//проверяем, если переданный таймштамп больше текущего времени
//а переданные имя файла и ключ правильные
//считываем файл и отдаем его пользователю
if($now < $time && $file_name == $file && $key == sha1($time.$file)){
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($file));
header ("Content-Disposition: attachment; filename=".$file_name);
readfile($file_name);
}
Большой плюс этого метода, в том, что вы получаете уникальные ссылки без прямого доступа к файлу, ограниченные по времени действия, достаточно защищенные и при этом не требующий ничего кроме php.
Вам не нужны будут крон-скрипты, база данных, чистка временных файлов итп.
Кроме того вы можете изменить скрипт как угодно, например, добавив защиту через куки, или проверяя страницу с которой перешел пользователь и его IP.
Можно использовать сервисы сокращения ссылок и настроить mod_rewrite так, что пользователь вообще не увидит какие параметры передаются в ссылке.
Отличное решение! Взял код для тестирования, наверняка где то понадобится.