Можно ли поместить файл.user.ini вне корня документа в PHP?

У меня есть веб-приложение на PHP, которое я создал и организовал в такие папки, как src, vendor и web, где "web" установлен как корневой для документа на моем сервере. Причина этого заключается в том, чтобы запретить доступ к любым другим файлам, которые не находятся в сети.

Я использую файл.user.ini, чтобы просто изменить некоторые глобальные настройки, но когда я поместил его на один уровень выше корневого элемента документа (родительского веб-узла), конфигурации, заданные там, где они вообще не срабатывают. Когда я поместил его в "сеть", все работало нормально.

Что является причиной этого? Могу ли я сделать так, чтобы.user.ini работал так, как я предлагал?

В плане безопасности я бы предпочел сделать это таким образом, вместо того, чтобы запретить доступ с помощью.htaccess внутри сети.

Я использую Fast CGI в качестве обработчика PHP и не хочу это менять.

2 ответа

Решение

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

Согласно http://php.net/manual/en/configuration.file.per-user.php,

В дополнение к основному файлу php.ini, PHP сканирует INI-файлы в каждом каталоге, начиная с каталога запрошенного PHP-файла и вплоть до корневого каталога текущего документа (как установлено в $_SERVER['DOCUMENT_ROOT']). Если файл PHP находится за пределами корня документа, проверяется только его каталог.

Точечные файлы не должны обслуживаться веб-сервером

Однако ваш веб-сервер вообще не должен обслуживать файлы /^./. Если ваш веб-сервер блокирует доступ к файлам, которые начинаются с точки, вы не рискуете раскрыть этот файл.

Установить конфигурацию в коде

Другой вариант - установить настройки ini в исходном коде, а не в файле.user.ini.

http://php.net/manual/en/ini.list.php дает список всех настроек ini, которые вы можете установить через ini_set(), В частности, опции отмечены ** PHP_INI_USER**.

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

$parsed_ini_variables_array = parse_ini_file('/home/username/ini_folder/file_name.ini');

Затем внутри INI-файла:

;Comment
[section name]
key=value
key2=value2

Надеюсь, это поможет.

Другие вопросы по тегам