配置文件(php.ini)在 PHP 启动时被读取。对于服务器模块版本的 PHP,仅在 web 服务器启动时读取一次。对于 CGI 和 CLI 版本,每次调用都会读取。
php.ini 的搜索路径如下(按顺序):
如果存在 php-SAPI.ini(SAPI 是当前所用的 SAPI 名称,因此实际文件名为 php-cli.ini 或 php-apache.ini 等),则会用它替代 php.ini。SAPI 的名称可以用 php_sapi_name() 来测定。
Note:
Apache web 服务器在启动时会把目录转到根目录,这将导致 PHP 尝试在根目录下读取 php.ini,如果存在的话。
在 php.ini 中可以使用环境变量,如下示例:
Example #1 php.ini 中的环境变量
; PHP_MEMORY_LIMIT 来自于环境变量的值 memory_limit = ${PHP_MEMORY_LIMIT}
由扩展库处理的 php.ini 指令,其文档分别在各扩展库的页面。内核配置选项见附录。不过也许不是所有的 PHP 指令都在手册中有文档说明。要得到自己的 PHP 版本中的配置指令完整列表,请阅读 php.ini 文件,其中都有注释。此外,也许从 Git 得到的» 最新版 php.ini 也有帮助。
Example #2 php.ini 例子
; 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"
自 PHP 5.1.0 起,有可能在 .ini 文件内引用已存在的 .ini 变量。例如:open_basedir = ${open_basedir} ":/new/dir"。
可以通过配置,让 PHP 在读完 php.ini 后,扫描指定路径中的附加 .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 | Hash 符号 (#) 不再被当做注释。 |
5.3.0 | Hash 符号 (#) 不应该被用于注释用,如果使用的话会抛出一个 warning 提醒。 |
5.2.0 | 允许设置 PHP_INI_SCAN_DIR 系统变量,来覆盖编译时指定的 "扫描路径" 配置。 |
5.1.0 | 可以从 .ini 文件中引用现有的 .ini 变量。 |