Хранение файлов под рутом - PullRequest
       13

Хранение файлов под рутом

1 голос
/ 20 апреля 2011

Из моих предыдущих обсуждений я убрал тот факт, что файлы безопасны, если вы поместите их в корневой каталог. Я говорил с человеком, который занимается этим для меня, он говорит, что если мы заблокируем публичный доступ, то пользователи, которые загрузили свой контент, не смогут загрузить или просмотреть свои файлы. чтобы дать вам пример того, что я пытаюсь сделать:

Если я, участник сайта, закачаю в мою учетную запись файл с текстом, я смогу вернуться и загрузить его. Но поскольку папка блокирует доступ, как можно загрузить файл?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Обычно файлы, которые вы хотите загружать, должны находиться внутри корня документа или где-то еще глубже внутри него.Но, если вы хотите, чтобы файлы загружались только в течение некоторого времени (например, вы хотите сначала проверить учетные данные пользователя или считать загрузки в базе данных), вы можете написать сценарий загрузки.Простейшая форма будет выглядеть примерно так:

<?php
header('Content-Disposition: attachment;filename=hello.txt');
readfile('/path/to/file.txt');
?>

Обратите внимание, что есть еще лучший способ использования специального модуля Apache под названием xsendfile.С этим вы можете сделать что-то вроде этого:

<?php
header('Content-Disposition: attachment;filename=hello.txt');
header('X-Sendfile: /path/to/file.txt');
?>

Apache увидит второй заголовок, уберет его и отправит содержимое файла file.txt.Приятно то, что ваш ресурсоемкий PHP-скрипт уже остановился, и вы не будете использовать какие-либо ограничения времени или PHP.

1 голос
/ 20 апреля 2011

Вы можете передавать файлы пользователю прямо из скрипта PHP. Вам нужна функция fpassthru . Но это решение не идеально и приводит к проблемам. Я бы предпочел сделать файлы, которые должны быть загружаемыми, чтобы разместить их в общедоступном каталоге (где-нибудь в корневом каталоге или подкаталоге документа). Или вы можете обслуживать их с поддоменов (даже лучше).

1 голос
/ 20 апреля 2011

Очевидно, что файлы, которые вы хотите сделать загружаемыми, должны храниться в корне или «после». Обычно файлы, к которым вы не хотите, чтобы другие обращались напрямую, должны храниться «под корнем». Это потому, что если вам нужно, чтобы эти файлы просто были включены, вы можете легко вернуться в корень и получить их с include() или require(), в то время как они скрыты пользователем, так как ваш адрес будет отображаться как www.site.com/index.php.

Файлы, которые должны быть общедоступными и требуют публичного доступа (например, загрузка), не могут храниться «под» корневым каталогом.

...