Есть много альтернатив. Большинство из них будет связано с использованием базы данных. Это то, что я делаю (кратко изложено)
Каждый файл, к которому необходимо получить доступ, имеет запись в таблице. Запись имеет основной идентификатор, секретный случайный токен и путь к файлу. Таблица индексируется как по первичному идентификатору, так и по токену.
На URL я получаю что-то вроде base_url('controller/file_access/).$id.'/'.$token
. Получив запрос, я проверю таблицу файлов, если совпадут оба параметра, я передам файл в браузер. Этот способ выполнения действий, хотя и немного более сложный, имеет два основных преимущества:
1. - он не позволяет пользователю просто попробовать разные числовые идентификаторы c и посмотреть, что отображается. Поскольку идентификаторы имеют номера c и автоинкремент, все, что вам нужно сделать, - это циклы от 1 до 100000 и загрузка всех файлов. Добавление токена и запрос к таблице с обоими параметрами значительно снижает риск того, что кто-то получит файл, для которого он / она не предназначен.
2.- он скрывает реальное местонахождение файла и передает его в браузер. таким образом выглядит (в глазах браузера) как находящийся в example.com/controller/file_access/id/token
, но реальный или относительный путь к изображению остается скрытым и недоступным из Интернета.
Используя это в качестве основы, вы Вы можете добавить много логи c поверх этого в зависимости от ваших потребностей. Вы также можете иметь поле «allow_user» в таблице, если файлы являются личными и / или пользовательскими c, чтобы вы не передавали файл в потоковом режиме, если пользователю не разрешено его видеть (даже если он имеет правильный Комбинация ID / токен).
Это всего лишь приблизительное описание того, что я делаю на нескольких сайтах. Возьмите это в качестве теоретического основания, на котором вы можете построить.