Something to note which is not well documented is that when you are specifying the path, it is JUST the path that is needed - not the path and filename. In the registry locations, you need to just put the folder path (e.g. C:\PHP\) and not the full path to the INI file (e.g. C:\PHP\php.ini). This will particularly save you some headaches if you are trying to run multiple versions of PHP on one server!
El fichero de configuración
El fichero de configuración (php.ini) es leído al arrancar PHP. En las versiones en que PHP funciona como módulo de servidor, esto sucede únicamente cuando se inicia el servidor. En las versiones CGI y CLI, esto ocurre en cada ejecución.
El fichero php.ini se busca en las siguientes ubicaciones (en orden):
- La ubicación específica de módulo SAPI (directiva PHPIniDir en Apache 2, opción de línea de comandos -c en CGI y CLI, parámetro php_ini en NSAPI, variable de entorno PHP_INI_PATH en THTTPD)
- La variable de entorno PHPRC. Antes de PHP 5.2.0, esta ubicaicón se comprobaba después de la clave de registro mencionada más abajo.
- A partir de PHP 5.2.0, se puede establecer la ubicación del fichero php.ini para diferentes versiones de PHP. Se examinan en orden las siguientes claves de registro: [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 la versión mayor, menor, y de edición de PHP. Si existiera un valor para IniFilePath en cualquiera de estas claves, la primera en ser encontrada se utilizaría como ubicación del fichero php.ini (solo en Windows).
- [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], valor de IniFilePath (solo en Windows).
- El directorio actual de trabajo (excepto CLI)
- El directorio del servidor web (para módulos SAPI), o el directorio de PHP (excepto en Windows)
- El directorio de Windows (C:\windows o C:\winnt) (para Windows), o la opción en tiempo de compilación --with-config-file-path.
Si existiera el fichero php-SAPI.ini (donde SAPI es la SAPI en uso, por ejemplo, php-cli.ini o php-apache.ini), se usaría éste en lugar de php.ini. Se puede determinar el nombre de la SAPI usando php_sapi_name().
Nota:
El servidor web Apache cambia el directorio al raíz al arrancar, haciendo que PHP intente leer php.ini desde el sistema de ficheros raíz si existiera.
Nota:
Las variables de entorno se pueden usar en el fichero php.ini
Las directivas de php.ini manejadas por extensiones están documentadas en la propia página de cada extensión. Hay una lista de directivas del núcleo disponible en el apéndice. Es posible que no todas las directivas de PHP estén documentadas en el manual: para consultar una lista completa de las directivas disponibles en su versión de PHP, por favor, lea los comentarios del fichero php.ini. Adicionalmente, puede encontrar útil » el último php.ini desde Git.
Ejemplo #1 Ejemplo de php.ini
; todo texto en una línea tras un punto y coma sin comillas (;) será ignorado [php] ; los marcadores de sección (textos entre corchetes) también se ignoran ; Los valores de tipo boolean puede establecerse a: ; true, on, yes ; o false, off, no, none register_globals = off track_errors = yes ; se pueden encerrar los strings entre comillas dobles include_path = ".:/usr/local/lib/php" ; las barras invertidas reciben el mismo tratamiento que el resto de caracteres include_path = ".;c:\php\lib"
A partir de PHP 5.1.0, es posible hacer referencia a variables .ini ya existentes desde el propio fichero .ini. Ejemplo: open_basedir = ${open_basedir} ":/new/dir".
"Since PHP 5.1.0, it is possible to refer to existing .ini variables from within .ini files."
If you have several configurations that you switch between (say development/testing/staging), or there is some other reason why several settings scattered through the .ini file might need to be changed all together on occasion, then combining this with a custom block can bring all the bits that need changing into one place:
[Customization]
custom.mode = "development"
custom.display_errors = "on"
custom.error_reporting = 30719
[PHP]
;;;;;;;;;;;;;;;;;;;
; About php.ini ;
....
And then refer to these variables in the rest of the file:
custom.session.save_path = "/tmp/"${custom.mode}
Bringing all the changes into one location in the file is often of immense benefit.
---
Unfortunately, variable names cannot (yet) be nested. Otherwise one could have one .ini file with several customisation blocks, and a single variable to choose which set of variables to use:
[Customization]
custom.mode = "development"
[Customization Development]
custom.development.display_errors = on
[Customization Production]
custom.development.display_errors = off
...
display_errors = ${custom.${custom.mode}.display_errors}
