配置基本语法

section

php.ini 本身是一个文本文件,其内部分为多个 section。section 名字使用方括号括起来,如 [PHP]、[date] 等。section 名字之后是配置项。

两个比较特殊的 section 可以分别针对 PATH 和 HOST 来做个性化配置,不过这种配置方式只在 CGI/FastCGI 模式下生效。当我们有多个项目共用一个配置文件并且有个性化配置需求时,就可以采用这种方式。示例:

[PATH=/dir]
post_max_size = 20M

该配置表示当请求的 PHP 文件位于 /dir 目录下时,post_max_size 上限为 “20M”。

[HOST=localhost]
post_max_size = 20M

该配置表示当请求的 HOST 为 localhost 时,post_max_size 上限为 “20M”。

注意:这两种方式的配置项无法被覆盖,也无法被 ini_set 函数动态修改。

注释

php.ini 中的配置使用 “; ” 来标识,去掉行首的 “; ” 则标识启用该配置,例如:

; display_errors = Off

设定范围

PHP 中的配置项不是任何时候任何地方都允许修改的,每个配置项有其自己所属的模式,模式一共有 4 种。

  • PHP_INI_USER:可在用户脚本(如 ini_set)或 Windows 注册表(自PHP 5.3起)以及.user.ini 中设定。

  • PHP_INI_PERDIR:可在 php.ini、.htaccess 或 httpd.conf 中设定。

  • PHP_INI_SYSTEM:可在 php.ini 或 httpd.conf 中设定。

  • PHP_INI_ALL:可在任何地方设定。

在 PHP 内部,这 4 个模式以宏的方式定义:

#define ZEND_INI_USER   (1<<0)
#define ZEND_INI_PERDIR (1<<1)
#define ZEND_INI_SYSTEM (1<<2)
#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)

配置项

配置项的格式如下:

directive = value

指令名大小写敏感,如 foo=bar 不同于 FOO=bar。

value 的值可以是以下形式:

  • 字符串,如 “foo”。

  • 数字,如 0、1、1.2。

  • PHP 常量,如 E_ALL、M_PI。

  • ini 常量,如 On、Off、True、False、Yes、No、None。

  • 表达式,如 E_ALL & ~E_NOTICE。

  • 已经存在的配置项,如 ${open_basedir},即可以以变量的形式引用已经存在的配置项。

当配置项为布尔值的时候,可以使用 1、On、True、Yes 来表示真,使用 0、Off、False、No 来表示假。

value 为空或者 none,表示将该配置项设置为空:

foo =       ; 将foo设为空字符串
foo = none  ; 将foo设为空字符串
foo = ""    ; 将foo设为空字符串

以下方式表示将 foo 设置为字符串 none:

foo = "none" ; 将foo设为字符串none

表达式

PHP 配置文件中的表达式仅有如下几种形式:|(位或)、^(位异或)、&(位与)、~(位非)、!(逻辑非)。