Привет, я использую PHP, чтобы пользователи могли загружать файлы, и я их сижу в папке вне webroot (/ var / www) по соображениям безопасности. Он находится в папке / var / uploads. Пользователь загружает файлы для определенных записей. Как только загруженные файлы будут перемещены в папку uploads, адрес вложения будет сохранен в базе данных. Теперь, когда пользователь проверяет запись, вложения для конкретной записи будут отображаться для загрузки.
Поскольку они находятся вне webroot, я не могу загрузить их, поскольку у них будет URL-адрес
Http: //localhost/var/uploads/attachment.txt
У нас есть решение или должны ли загружаемые папки быть дочерними каталогами веб-сайта?
<?php $con = mysql_connect("localhost","id","pass"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("db", $con); $result = mysql_query("select * from attachments"); while($row = mysql_fetch_array($result)) { echo '<a href="'.$row[2].'" target="_blank">Download</a>--'.$row[3].'<br>'; } mysql_close($con); ?>
это код, который я использую. Владелец папки – www-data: / или веб-сервер. Таким образом, не должно быть проблем с доступом.
использование
символическая ссылка, указывающая на /var/uploads
(учебник здесь )
директива Alias /uploads /var/uploads
Alias
Alias /uploads /var/uploads
(должна быть в httpd.conf)
или прокси-скрипт PHP, который принимает переменную GET filename=upload.jpg
и извлекает файл, например, используя fpassthru()
последний является наименее предпочтительным вариантом, поскольку он ресурсоемкий, но иногда это единственная альтернатива. Он также нуждается в надлежащей защите, чтобы злоумышленник не мог получить другие файлы на вашем сервере через прокси.
Вы можете просто иметь файл php, который отображает содержимое файла в ответ, и соответствующим образом задает тип mime.
Хороший способ загрузить PHP с помощью mod_xsendfile
если вы можете его установить, все, что должен сделать PHP-процесс, это отправить заголовок ответа и выйти, и веб-сервер позаботится об остальном.