The configuration file
The configuration file (php.ini)
is read when PHP starts up. For the server module versions of PHP,
this happens only once when the web server is started. For the
CGI and CLI versions, it happens on
every invocation.
php.ini is searched for in these locations (in order):
-
SAPI module specific location (PHPIniDir directive
in Apache 2, -c command line option in CGI and CLI,
php_ini parameter in NSAPI,
PHP_INI_PATH environment variable in THTTPD)
-
The PHPRC environment variable. Before PHP 5.2.0,
this was checked after the registry key mentioned below.
-
As of PHP 5.2.0, the location of the php.ini file
can be set for different versions of PHP. The following registry keys
are examined in order:
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z],
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], where
x, y and z mean the PHP major, minor and release versions. If there is a
value for IniFilePath in any of these keys, the first
one found will be used as the location of the php.ini
(Windows only).
-
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP], value of
IniFilePath (Windows only).
-
Current working directory (except CLI).
-
The web server's directory (for SAPI modules), or directory of PHP
(otherwise in Windows).
-
Windows directory (C:\windows
or C:\winnt) (for Windows), or
--with-config-file-path compile time option.
If php-SAPI.ini exists (where SAPI is the SAPI in use,
so, for example, php-cli.ini or
php-apache.ini), it is used instead of php.ini.
The SAPI name can be determined with php_sapi_name().
Note:
The Apache web server changes the directory to root at startup, causing
PHP to attempt to read php.ini from the root filesystem if it exists.
Using environment variables can be used in php.ini as shown below.
Example #1 php.ini Environment Variables
; PHP_MEMORY_LIMIT is taken from environment
memory_limit = ${PHP_MEMORY_LIMIT}
The php.ini directives handled by extensions are documented
on the respective pages of the extensions themselves. A list of
the core directives is available in the appendix. Not all
PHP directives are necessarily documented in this manual: for a complete list
of directives available in your PHP version, please read your well commented
php.ini file. Alternatively, you may find
ยป the latest php.ini from Git
helpful too.
Example #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"
Since PHP 5.1.0, it is possible to refer to existing .ini variables from
within .ini files. Example: open_basedir = ${open_basedir}
":/new/dir".
Scan directories
It is possible to configure PHP to scan for .ini files in a directory
after reading php.ini. This can be done at compile time by setting the
--with-config-file-scan-dir
option. In
PHP 5.2.0 and later, the scan directory can then be overridden at run time
by setting the PHP_INI_SCAN_DIR environment variable.
It is possible to scan multiple directories by separating them with the
platform-specific path separator (; on Windows, NetWare
and RISC OS; : on all other platforms; the value PHP is
using is available as the PATH_SEPARATOR
constant).
If a blank directory is given in PHP_INI_SCAN_DIR, PHP
will also scan the directory given at compile time via
--with-config-file-scan-dir
.
Within each directory, PHP will scan all files ending in
.ini in alphabetical order. A list of the files that
were loaded, and in what order, is available by calling
php_ini_scanned_files(), or by running PHP with the
--ini
option.