Файл конфигурации (php.ini) считывается при запуске PHP. Для версий серверных модулей PHP это происходит только один раз при запуске веб-сервера. Для CGI- и CLI-версии PHP — при каждом вызове.
PHP ищёт файл php.ini в следующих местах (по порядку поиска):
PHPIniDir
в веб-сервере Apache 2, параметр командной строки -c
в CGI- и CLI-интерфейсе)
php.ini
зависит от версии PHP.
Корень ключей реестра ОС зависит от разрядности ОС и PHP. При установке 32-разрядного PHP
на 32-разрядной ОС Windows или 64-разрядного PHP на 64-разрядной Windows
PHP исследует раздел реестра [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
,
при установке 32-разрядного PHP на 64-разрядной Windows —
раздел [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
.
PHP проверяет следующие разделы реестра по порядку для установок
с одинаковой разрядностью:
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]
и [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]
,
где x, y и z подразумевают мажорную, минорную и точечную версии выпусков PHP.
Для 32-разрядного PHP на 64-разрядной ОС Windows ключи реестра будут другими:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]
и [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]
.
PHP будет использовать первый найденный ключ как расположение файла
php.ini
, если ключи содержат
значение IniFilePath
(только для ОС Windows).
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
или [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
, значение
IniFilePath
(только для Windows).
--with-config-file-path
.
Вместо файла php.ini PHP будет работать с файлом php-SAPI.ini, где SAPI — текущий интерфейс, например php-cli.ini или php-apache.ini, если файл SAPI-интерфейса существует. Название SAPI-интерфейса между веб-сервером и PHP узнают через функцию php_sapi_name().
Замечание:
Веб-сервер Apache изменяет текущую директорию на корневую при запуске, в результате чего PHP считывает файл php.ini из корневой файловой системы, если файл существует.
В значениях конфигурации в файле php.ini разрешается ссылаться на значения переменных окружения, как показывает следующий пример. Начиная PHP 8.3.0 доступно определение резервных значений, которые директивы принимают, если сослались на неопределённую переменную.
Пример #1 Переменные окружения в файле php.ini
; Переменную PHP_MEMORY_LIMIT получили из окружения memory_limit = ${PHP_MEMORY_LIMIT} ; Резервное значение директивы будет равняться 30, если переменную окружения PHP_MAX_EXECUTION_TIME не определили max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
Директивы файла php.ini, которые обрабатываются модулями, описывают страницы модулей. Список директив ядра приводит приложение «Директивы php.ini». Не каждая PHP-директива задокументирована в руководстве: полный список доступных в установленной версии PHP директив изложили в подробных комментариях файла php.ini. » Последнюю версию php.ini содержит Git-репозиторий.
Пример #2 Пример php.ini
; любой текст в строке после точки с запятой (;) без кавычек игнорируется [php] ; маркеры разделов (текст в квадратных скобках) также игнорируется ; Могут быть установлены следующие логические значения: ; true, on, yes ; или false, off, no, none register_globals = off track_errors = yes ; вы можете заключать строки в двойные кавычки include_path = ".:/usr/local/lib/php" ; обратный слеш обрабатывается так же, как любые другие символы include_path = ".;c:\php\lib"
Возможно обращаться к существующим ini-переменным из
ini-файлов. Пример: open_basedir = ${open_basedir}
":/new/dir"
.
Существует возможность сконфигурировать PHP для сканирования директорий в поисках .ini-файлов после считывания php.ini. Это можно сделать на моменте компиляции, указав опцию --with-config-file-scan-dir. Сканирование директорий может быть переопределено во время исполнения установкой переменной среды PHP_INI_SCAN_DIR.
Можно сканировать несколько директорий, разделяя их разделителем,
используемом в вашей операционной системе (;
в Windows, NetWare
и RISC OS; :
на всех остальных платформах; в PHP есть
константа PATH_SEPARATOR
, которую можно использовать)
Если PHP_INI_SCAN_DIR пуста, то PHP также будет
сканировать директорию, заданную на этапе компиляции с помощью
--with-config-file-scan-dir.
В каждой директории PHP сканирует все файлы заканчивающиеся на .ini
в алфавитном порядке. Список всех загруженных файлов в том порядке,
в котором они были загружены, доступен с помощью функции
php_ini_scanned_files(), либо при запуске PHP с опцией --ini.
Допустим, что PHP сконфигурирован с --with-config-file-scan-dir=/etc/php.d, и разделитель путей :... $ php PHP загрузит все файлы /etc/php.d/*.ini как конфигурационные. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP загрузит все файлы /usr/local/etc/php.d/*.ini как конфигурационные. $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP загрузит все файлы /etc/php.d/*.ini, а потом /usr/local/etc/php.d/*.ini как конфигурационные. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP загрузит все файлы /usr/local/etc/php.d/*.ini, а потом /etc/php.d/*.ini как конфигурационные.