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.
El fichero de configuración (php.ini) es leído por PHP al inicio. Si se ha compilado PHP como módulo, el fichero solo se lee una vez, al inicio del servidor web. Para las versiones CGI y CLI el fichero es leído en cada invocación.
El php.ini se busca en estos lugares (y en este orden) :
PHPIniDir
de Apache 2, la opción de la línea de comandos -c
en CGI y en CLI)
php.ini
puede ser definido para diferentes versiones de PHP.
La raíz de las claves de registro depende de la arquitectura de 32 o 64 bits del SO y de PHP.
Para un SO y PHP de 32 bits o un SO y PHP de 64 bits, utilizar
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
para PHP de 32 bits
en un SO de 64 bits, utilizar
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
en su lugar.
Para una instalación con la misma arquitectura, las siguientes claves de registro se buscan en este orden :
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]
y
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]
, donde
x, y y z significan las versiones mayores, menores y normales.
Para una arquitectura de 32 bits de PHP en un SO de 64 bits, las siguientes claves de
registro se buscan en este orden :
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]
y
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]
, donde
x, y y z significan las versiones mayores, menores y normales.
Si hay un valor para IniFilePath
en estas claves,
el primero encontrado será utilizado como el lugar donde se encuentra el fichero
php.ini
(solo en Windows).
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
o
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
, valor de
IniFilePath
(solo en Windows).
--with-config-file-path
durante la compilación
Si el fichero php-SAPI.ini existe (donde SAPI utiliza SAPI, por lo que el nombre del fichero es e.g. php-cli.ini o php-apache.ini), se utilizará en lugar de php.ini. El nombre SAPI puede ser determinado utilizando la función php_sapi_name().
Nota:
El servidor web Apache cambia este directorio al directorio root al inicio, lo que hace que PHP intente leer php.ini desde el sistema de ficheros raíz si existe.
Las variables de entorno pueden ser referenciadas en los valores de configuración de php.ini como se ilustra a continuación. A partir de PHP 8.3.0, un valor de repliegue puede ser especificado, que será utilizado cuando la variable referenciada no esté definida.
Ejemplo #1 Variables de entorno en php.ini
; PHP_MEMORY_LIMIT se toma desde el entorno memory_limit = ${PHP_MEMORY_LIMIT} ; Si PHP_MAX_EXECUTION_TIME no está definido, tomará el valor de repliegue 30. max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
Las directivas php.ini están directamente documentadas, por extensiones, en las páginas respectivas del manual de estas extensiones. La lista de directivas internas está disponible en el anexo. Es probable que no todas las directivas PHP estén documentadas en el manual. Para una lista completa de las directivas disponibles en su versión de PHP, lea los comentarios de su propio fichero php.ini. También se puede encontrar la » última versión del php.ini en Git.
Ejemplo #2 Extracto del php.ini
; todo texto en una línea, situado después de un punto y coma ";" es ignorado [php] ; los marcadores de sección (texto entre corchetes) también son ignorados ; Los valores booleanos pueden ser especificados así : ; true, on, yes ; o false, off, no, none register_globals = off track_errors = yes ; se pueden colocar las cadenas de caracteres entre comillas include_path = ".:/usr/local/lib/php" ; Las barras invertidas se tratan como cualquier carácter include_path = ".;c:\php\lib"
Es posible referirse a variables .ini
desde ficheros .ini. Por ejemplo : open_basedir = ${open_basedir}
":/new/dir"
.
Es posible configurar PHP para leer los ficheros .ini presentes en un directorio. después de la lectura de php.ini. Esto se ajusta durante la compilación con el argumento --with-config-file-scan-dir. El directorio a leer puede ser modificado durante la ejecución por la definición de la variable de entorno PHP_INI_SCAN_DIR.
Es posible leer varios directorios separándolos con un
separador de ruta específico de la plataforma (;
para Windows, NetWare
y RISC OS; :
para todas las otras plataformas; el valor utilizado por PHP es
disponible en la constante PATH_SEPARATOR
).
Si se proporciona un directorio vacío en
PHP_INI_SCAN_DIR, PHP
también leerá el directorio proporcionado durante la compilación a través de
--with-config-file-scan-dir.
En cada directorio, PHP leerá todos los ficheros que terminen por
.ini
en orden alfabético. Una lista de los ficheros que
han sido cargados y en qué orden está disponible llamando a la función
php_ini_scanned_files(), o ejecutando PHP con la opción
--ini.
Suponiendo que PHP está configurado con --with-config-file-scan-dir=/etc/php.d, y que el separador de ruta es :... $ php PHP cargará todos los ficheros presentes en /etc/php.d/*.ini como fichero de configuración. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP cargará todos los ficheros presentes en /usr/local/etc/php.d/*.ini como fichero de configuración. $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP cargará todos los ficheros presentes en /etc/php.d/*.ini, luego /usr/local/etc/php.d/*.ini como fichero de configuración. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP cargará todos los ficheros presentes en /usr/local/etc/php.d/*.ini, luego en /etc/php.d/*.ini como fichero de configuración.
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.
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.
The same behavior with `error_reporting` as Pictor13 pointed out.
I found a solution, to specify `error_reporting` in a numeric version.
php.ini
`error_reporting = ${ERROR_REPORTING}`
.env
`ERROR_REPORTING=24575`
24575 means `E_ALL & ~E_DEPRECATED`
PS: with the help of googling you can find "calculator of numeric values for error_reporting"