For someone who's also wondering.
PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.Конфигурациската датотека
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Конфигурациската датотека
Референца за `configuration.file.php` со подобрена типографија и навигација.
Конфигурациската датотека
The configuration file (php.iniКонфигурациската датотека ( CGI and CLI ) се чита кога PHP започнува. За верзиите на PHP како модул на серверот, ова се случува само еднаш кога ќе се стартува веб-серверот. За
php.ini верзии, ова се случува при секоја инвокација.
-
се бара на следниве локации (по редослед):
PHPIniDirспецифична локација на SAPI модулот (-cдиректива во Apache 2, - На PHPRC променливата на околината.
-
опција на командната линија во CGI и CLI)
php.iniЛокацијата на[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]датотеката може да се постави за различни верзии на PHP. Коренот на регистарските клучеви зависи од 32- или 64-битната верзија на инсталираниот ОС и PHP. За 32-битен PHP на 32-битен ОС или 64-битен PHP на 64-битен ОС користете[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]за 32-битна верзија на PHP на 64-битен ОС користете[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z],[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]and[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]] наместо тоа. За инсталација со иста битност, следните регистарски клучеви се испитуваат по редослед:[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z],[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]and[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x], каде што x, y и z значат главната, помалата и верзијата на изданието на PHP. За 32-битни верзии на PHP на 64-битен ОС, следните регистарски клучеви се испитуваат по редослед:IniFilePath, каде што x, y и z значат главната, помалата и верзијата на изданието на PHP. Ако постои вредност заphp.iniво некој од овие клучеви, првата пронајдена ќе се користи како локација на -
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]or[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP](само за Windows).IniFilePathво некој од овие клучеви, првата пронајдена ќе се користи како локација на - , вредност на
- Тековна работна директориум (освен CLI).
-
Директориум на веб-серверот (за SAPI модули), или директориум на PHP (инаку во Windows).C:\windows
or C:\winntWindows директориум (
--with-config-file-pathопција за време на компајлирање.
Враќа php-SAPI.ini постои (каде што SAPI е употребениот SAPI, така што, на пример, php-cli.ini or php-apache.ini), се користи наместо php.ini. Името на SAPI може да се одреди со php_sapi_name().
Забелешка:
Веб-серверот Apache го менува директориумот на root при стартување, предизвикувајќи PHP да се обиде да чита php.ini од root-овиот датотечен систем ако постои.
Променливите на околината може да се повикуваат во вредностите на конфигурацијата во php.ini како што е прикажано подолу. Од PHP 8.3.0, може да се специфицира резервна вредност што ќе се користи кога референцираната променлива не е дефинирана.
Пример #1 php.ini Променливи на околината
; PHP_MEMORY_LIMIT is taken from environment
memory_limit = ${PHP_MEMORY_LIMIT}
; If PHP_MAX_EXECUTION_TIME is not defined, it will fall back to 30
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
На php.ini директивите обработени од екстензиите се документирани на соодветните страници на самите екстензии. А листа на основните директиви е достапна во прилогот. Не сите PHP директиви се нужно документирани во овој прирачник: за целосна листа на директиви достапни во вашата верзија на PHP, ве молиме прочитајте го вашиот добро коментиран php.ini датотека. Алтернативно, може да најдете » најновите php.ini од Git исто така корисни.
Пример #2 php.ini example
; any text on a line after an unquoted semicolon (;) is ignored [php] ; section markers (text within square brackets) are also ignored ; Boolean values can be set to either: ; true, on, yes ; or false, off, no, none register_globals = off track_errors = yes ; you can enclose strings in double-quotes include_path = ".:/usr/local/lib/php" ; backslashes are treated the same as any other character 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; PATH_SEPARATOR на сите други платформи; вредноста што ја користи PHP е достапна како PHP_INI_SCAN_DIRконстанта). Ако е даден празен директориум во
--with-config-file-scan-dir.
, PHP исто така ќе го скенира директориумот даден при компилација преку
.ini Во секој директориум, PHP ќе ги скенира сите датотеки што завршуваат на
php_ini_scanned_files()по азбучен ред. Список на датотеките што беа вчитани, и по кој редослед, е достапен со повикување
--ini option.
Assuming PHP is configured with --with-config-file-scan-dir=/etc/php.d, and that the path separator is :... $ php PHP will load all files in /etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP will load all files in /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP will load all files in /etc/php.d/*.ini, then /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP will load all files in /usr/local/etc/php.d/*.ini, then /etc/php.d/*.ini as configuration files.
Белешки од корисници 3 белешки
It is worth noting that $PHP_INI_SCAN_DIR is **not** recursive, which offers flexibility in organizing configuration in base-environment fashion:
$ mkdir -p /tmp/php_conf/prod /tmp/php_conf/dev
$ touch /tmp/php_conf/php.base.ini /tmp/php_conf/prod/php.ini /tmp/php_conf/dev/php.ini
$ export PHP_INI_SCAN_DIR="/tmp/php_conf:/tmp/php_conf/dev"
$ php --ini
//...
Scan for additional .ini files in: /tmp/php_conf:/tmp/php_conf/dev
Additional .ini files parsed: /tmp/php_conf/php.base.ini,
/tmp/php_conf/dev/php.ini
Such behavior can be used with docker where whole a subtree of configs is mounted into a dev-container, with ability to control which set of files is loaded using an environment variable.Notice that `error_reporting` CANNOT be interpolated with an environment variable (e.g. `error_reporting = ${PHP_ERROR_REPORTING}`).
`error_reporting` is treated differently than other directives:
if assigned an environment variable, this will be silently ignored and replaced with value `0` (aka no-reporting).
I couldn't find documentation about it.
Is maybe an info that should be added in https://github.com/php/php-src/blob/8f5156fcba9906664ecd97e4c279ee980e522121/php.ini-production#L451-L500 ?
I am not aware if this specific behavior affects only `error_reporting` or also other directive.