Где я должен помещать важные файлы так, чтобы они читались с помощью PHP-скриптов?

Я нахожусь на хосте Parallels / Plesk VPS, и это действительно вопрос новичков.

Веб-сайт находится по адресу:

/var/www/vhosts/my-domain-name/httpdocs 

Существует также путь, называемый:

 /var/www/vhosts/my-domain-name/private/ 

Но PHP-скрипты не могут читать файлы там.

По моему мнению, любой файл, помещенный в веб-корневой каталог, может быть предоставлен общественности, если будет запрошен его веб-путь / имя файла. Я смутно знаю об использовании файлов .htaccess, чтобы сообщить Apache не обслуживать определенные файлы / директории.

Но может (или должен) разместить свой файл с конфиденциальными данными где-то за пределами webroot, но все же разрешить чтение PHP-скриптов?

Спасибо!

Вот мои ошибки при попытке прочитать файл в «частной» папке выше:

 Warning: file() [function.file]: open_basedir restriction in effect. File(../../private/test.txt) is not within the allowed path(s): (/var/www/vhosts/blah.com/httpdocs:/tmp) in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8 Warning: file(../../private/test-dt.txt) [function.file]: failed to open stream: Operation not permitted in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8 

ОБНОВЛЕНИЕ: РЕШЕН

Picto в reddit / r / PHPHelp дал мне то, что мне было нужно, и он специфичен для систем Plesk. Мне пришлось написать файл с именем vhost.conf, помещенный в папку conf, которая существует на том же уровне, что и httpdocs. И в vhost.conf я использовал:

 <Directory /var/www/vhosts/my-domain-name/httpdocs> php_admin_value open_basedir /var/www/vhosts/my-domain-name/httpdocs:/tmp:/var/www/vhosts/my-domain-name/myfolder </Directory> 

Поэтому теперь я размещаю свои файлы в «myfolder», который находится за пределами webroot (httpdocs). После этого, чтобы эти настройки вступили в силу (перезапуск Apache не работает), есть некоторые конкретные команды Plesk, которые можно найти: http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/

Это хорошая практика хранения конфиденциальных данных за пределами apache document root.

Вы должны разрешить PHP обращаться к этим папкам, добавляя или изменяя конфигурацию виртуального хоста.

Найдите php_value open_basedir

и добавьте ваши папки, разделенные двоеточием (:)

Больше информации на open_basedir

Примечание. Существует несколько проблем безопасности с open_basedir, которые объясняются в

http://www.hardened-php.net/advisory_012004.42.html

РЕДАКТИРОВАТЬ:

Я использую эту древовидную структуру для каждого домена:

 domain/ www-data permisions ├── etc rx ├── log rwx ├── phpCache rwx ├── phpFiler rwx ├── phpInclude rx ├── phpLogs rwx ├── phpSession rwx ├── phpTmp rwx ├── phpTrash rwx ├── privat --- ├── www443 rx └── www80 rx 

и т. д.: для файлов конфигурации приложения.

log: для файлов журнала Apache или nginx

phpCache: для файлов Zend_Cache

phpFiler: для файлов приложения скрипт PHP служит, если у пользователя есть привилегии.

phpInclude: php_value include_path

phpLogs: для журналов приложений

phpSessions: для хранения сеансов данных виртуального хоста.

phpTmp: для временных файлов, например, для загрузки.

phpTrash: мусор для phpFiler.

приват: для моих личных высыпаний

www443: для https document root

www80: для http document root

В open_basedir clausule я помещаю все папки, кроме журнала и привата.

Это означает, что так называемый safe-mode влияет, что не позволяет открывать файлы и каталоги за пределами данного каталога (например, ваш конкретный веб-корень). Это очень часто встречается у общих хостеров, и если у вас нет доступа к php.ini, вам не повезло и не удается получить доступ к вашим файлам в ../private.

Чтобы получить доступ к защищенным файлам, добавьте каталог под своим обычным httpdocs -directory (например, private) и добавьте файл .htaccess внутри с содержимым

 order allow deny deny from all 

Это предотвратит доступ к файлам без прохождения вашего php-скрипта.

В последнем примечании: если ваш php-файл был прав под каталогом httpdocs , ваш сценарий должен указывать на ../private/test-dt.txt а не на ../../private/test-dt.txt .

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

Поэтому поместите их где-нибудь в качестве /var/www/vhosts/sensitive-docs/ и установите разрешения для каталога, чтобы PHP мог читать файлы.