Можно ли поместить файл.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
Надеюсь, это поможет.