У меня есть сценарий, который позволяет только авторизованным пользователям загружать файлы в определенную папку.
Однако я не знаю, как запретить пользователям свободно скачивать файлы без логина.
Мне нужно решение в php.
У меня есть googled вокруг, но ничего прямо вперед пока.
В настоящее время в моем корневом документе у меня есть папка с именем admin и подпапка под названием uploads внутри администратора. Таким образом, может загружаться только роль администратора. Как редактор, так и администратор могут загрузить. Что мне делать в этом случае?
Пожалуйста, порекомендуйте.
Поместите файлы где-нибудь за пределы общедоступного каталога webroot или настройте сервер, чтобы он не обслуживал файлы. Пока ваш сервер будет счастливо обслуживать все с допустимым URL-адресом, вы ничего не можете сделать с PHP, чтобы это предотвратить.
Если ваши файлы находятся в папке /public_html/
, выньте их из этой папки и поместите их в eg /secret_files/
, поэтому ваша структура каталогов выглядит примерно так:
public_html/ index.html admin/ admin_index.php secret_files/ my_secret_file.txt
Веб-сервер настроен только на обслуживание файлов в каталоге /public_html/
, поэтому никто не будет иметь доступ к каталогам за пределами (технический термин выше ).
Чтобы позволить кому-то загружать эти файлы, сделайте так, как подсказывает cletus, и используйте readfile
для «ручной подачи» файлов через PHP-скрипт. PHP все равно будет иметь доступ к этим другим частям файловой системы, поэтому вы можете использовать его в качестве гейткипера.
Не храните файлы в каталоге под корнем документа.
Вместо этого переместите их в другое место, а затем скрипт PHP может программным образом определить, может ли кто-то их загрузить, а затем использовать readfile()
или что-то подобное, чтобы readfile()
их пользователю.
Вы также можете настроить веб-сервер для того, чтобы не обслуживать файлы из этого каталога, но тогда вам понадобится PHP для их обслуживания. Чище просто не ставить их под корень документа.
Ответ на вопрос о том, как защитить паролем PHP: это должно решить вашу проблему.