Файл конфигурации
Файл конфигурации (php.ini) считывается при запуске PHP. Для версий серверных модулей PHP это происходит только один раз при запуске веб-сервера. Для CGI и CLI версий это происходит при каждом вызове.
Поиск php.ini производится в следующих местах (по порядку поиска):
-
По месту расположения модуля SAPI (
PHPIniDirдиректива Apache 2,-cпараметр командной строки CGI и CLI,php_iniпараметр в NSAPI) - Переменная среды PHPRC. До PHP 5.2.0 поиск по переменной производился после поиска в реестре, указанном ниже.
-
Как и в PHP 5.2.0, местоположение файла
php.iniможет быть указано для различных версий PHP. Корневой ключ реестра зависит от разрядности операционной системы и установки PHP. Для 32-разрядного PHP на 32-разрядной Windows или 64-разрядного PHP и 64-разрядной Windows используйте[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]. Для 32-разрядного PHP на 64-разрядной Windows[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\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 подразумевают major, minor и release версии 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]. Если также имеется значениеIniFilePathв любом из этих ключей, то местонахождениеphp.iniбудет определено первым ключом по порядку (только для Windows). -
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]или[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP], значениеIniFilePath(только для Windows). - Текущая директория (исключая CLI).
- Директория веб-сервера (для модулей SAPI) или директория PHP (иначе в Windows).
-
В директории Windows (C:\windows
или C:\winnt) (для Windows) или
--with-config-file-pathс выбором при компиляции.
Если файл php-SAPI.ini существует (где SAPI - это тип интерфейса, который используется, например, php-cli.ini или php-apache.ini), то он используется вместо php.ini. Тип интерфейса между веб-сервером и PHP может быть определен с помощью функции php_sapi_name().
Замечание:
Веб-сервер Apache изменяет текущую директорию на корневую при запуске, в результате чего PHP считывает php.ini из корневой файловой системы, если файл существует.
В php.ini можно использовать переменные окружения, как показано ниже.
Пример #1 Переменные окружения php.ini
; PHP_MEMORY_LIMIT взята из переменных окружения
memory_limit = ${PHP_MEMORY_LIMIT}
Директивы 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"
С версии PHP 5.1.0 стало возможным обращаться к существующим ini-переменным из
ini-файлов. Пример: open_basedir = ${open_basedir}
":/new/dir".
Сканирование директорий
Существует возможность сконфигурировать PHP для сканирования директорий в поисках .ini-файлов после считывания php.ini. Это можно сделать на моменте компиляции, указав опцию --with-config-file-scan-dir. В PHP 5.2.0 и выше, сканирование директорий может быть переопределено во время исполнения установкой переменной среды 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 как конфигурационные.
Список изменений
| Версия | Описание |
|---|---|
| 7.0.0 |
Символ "решетка" (#) больше не используется для комментариев.
|
| 5.3.0 |
Символ "решетка" (#) больше не должен использоваться для
комментариев и вызовет предупреждение в случае использования.
|
| 5.2.0 | Переменная окружения PHP_INI_SCAN_DIR может быть установлена для переопределения набора сканируемых директорий. |
| 5.1.0 | Можно ссылаться на существующие ini-переменные из ini-файлов. |