php.ini 中文版 (PHP7,PHP8)

作者:金步国


版权声明

本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文作者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于作者水平有限,因此不能保证作品内容准确无误。如果你发现了作品中的错误(哪怕是错别字也好),请来信指出,任何提高作品质量的建议我都将虚心接纳。


;;;;;;;;;;;;;;;;;;
;; 关于 php.ini ;;
;;;;;;;;;;;;;;;;;;
; 对于服务器模块,仅在服务器启动时读取一次 php.ini 。对于 CGI 和 CLI ,每次调用都会读取 php.ini 。

; PHP 会在初始化时按如下顺序搜索此文件(搜到即停):
; 1. SAPI 模块指定的位置:
;     (a) Apache 2.x 中的 PHPIniDir 指令
;     (b) CGI/CLI 模式下 -c 命令行选项
;     (c) NSAPI 中的 php_ini 参数
;     (d) THTTPD 中的 PHP_INI_PATH 环境变量
; 2. PHPRC 环境变量指定的位置
; 3. Windows注册表指定的位置(依次搜索、搜到即停):
;     (a) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z] 内的 IniFilePath 的值(特定于php-x.y.z版本)
;     (b) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] 内的 IniFilePath 的值(特定于php-x.y.*系列版本)
;     (c) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x] 内的 IniFilePath 的值(特定于php-x.*.*系列版本)
;     (d) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] 内的 IniFilePath 的值(不特定于php的版本)
; 4. 当前工作目录(不适用于 CLI 模式)
;    [提示] Apache 会在启动时把当前工作目录转到根目录,这将导致 PHP 可能会尝试在根目录读取 php.ini 。
; 5. web 服务器目录(适用于 SAPI 模块)或 PHP 所在目录(Windows 下其它情况)
; 6. 编译时选项 --with-config-file-path 指定的位置 或 Windows目录( %SystemRoot% 通常是"C:\Windows")

; 如果存在 php-SAPI.ini (例如 php-apache2handler.ini, php-fpm-fcgi.ini, php-cli-server.ini, php-cli.ini 等),
; 那么 php.ini 将会被 php-SAPI.ini 取代。

; 最新版本:
; php.ini-production
; php.ini-development

;;;;;;;;;;;;
;;  语法  ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白行和以分号开始的行被简单地忽略。
; 普通配置段标题(例如: [PHP])也被简单地忽略(即使将来它们可能有某种意义)。

; 形如 [PATH=/www/mysite] 的配置段表示仅作用于 /www/mysite 目录下的 PHP 文件。
; 形如 [HOST=www.example.com] 的配置段表示仅作用于 www.example.com 站点的 PHP 文件。
; [提示]对于拥有多个域名的站点,应该使用 SERVER_NAME 参数的值(也就是域名列表中的第一个域名)。
; 这两种配置段中的设置既不能在运行时修改、也不受 .user.ini 文件的影响。
; 这两种配置段仅工作于 CGI/FastCGI 模式[FastCGI 协议规范中文版],且不能包含 extension 与 zend_extension 指令。

; 设置指令的格式如下:
; 指令 = 值
; "指令"是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 不能识别的"指令"将会被直接忽略、未设置的指令将会使用其默认值。
; "值"可以是:
; 1. 一个字符串(可以用引号界定,如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)(不能在 php.ini 之外使用[例如 httpd.conf])
; 4. 一个INI常量(On, Off, Yes, No, None)
; 5. 一个表达式(如:E_ALL & ~E_NOTICE)
; [注1]可以在"值"中引用环境变量,如:"${AUTHOR}.log" 、 ".:${USER}/pear/php"
; [注2]可以在"值"中引用先前设置的指令值,如:"${open_basedir}:/new/dir"

; 仅可在表达式中使用 位运算符、逻辑非、圆括号:
; | 位或(OR)
; ^  位异或(XOR)
; & 位与(AND)
; ~ 位非(NOT)
; ! 逻辑非(NOT)

; 布尔标志用 1, On, True, Yes 表示打开,用 0, Off, False, No 表示关闭。

; 空字符串可以用在等号后不写任何东西表示,或者用 None 关键字:
; foo =         ; 将foo设为空字符串(推荐的方式)
; foo = None    ; 将foo设为空字符串
; foo = "None"  ; 将foo设为字符串'None'

; 如果要在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,
; 那么只能在加载这些动态扩展的指令行(extension 或 zend_extension)之后使用这些常量。

;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  生产环境与开发环境  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; PHP 面向生产环境与开发环境分别提供了 php.ini-production 与 php.ini-development 两套参考配置。
; 两套参考配置的差异如下:

;display_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off

;display_startup_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off

;error_reporting
;   Default Value: E_ALL
;   Development Value: E_ALL
;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

;log_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: On

;max_input_time
;   Default Value: -1 (Unlimited)
;   Development Value: 60 (60 seconds)
;   Production Value: 60 (60 seconds)

;output_buffering
;   Default Value: Off
;   Development Value: 4096
;   Production Value: 4096

;register_argc_argv
;   Default Value: On
;   Development Value: Off
;   Production Value: Off

;request_order
;   Default Value: None
;   Development Value: "GP"
;   Production Value: "GP"

;session.gc_divisor
;   Default Value: 100
;   Development Value: 1000
;   Production Value: 1000

;session.sid_bits_per_character
;   Default Value: 4
;   Development Value: 5
;   Production Value: 5

;short_open_tag
;   Default Value: On
;   Development Value: Off
;   Production Value: Off

;variables_order
;   Default Value: "EGPCS"
;   Development Value: "GPCS"
;   Production Value: "GPCS"

;zend.exception_ignore_args
;   Default Value: Off
;   Development Value: Off
;   Production Value: On

;zend.exception_string_param_max_len
;   Default Value: 15
;   Development Value: 15
;   Production Value: 0

;;=========================================================================================
;;=====================================配置指令详解========================================
;;=========================================================================================
; 以下每个指令的值都与 PHP-8.0 内建的默认值相同(也兼顾 PHP-7.2 PHP-7.3 PHP-7.4 版本)。
; 也就是说,如果'php.ini'不存在,或者你删掉了某些行,默认值与之相同。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;   SAPI ( Server API )   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[apache2handler]
; 此配置段中的指令仅在以 Apache2处理器模块(php_module) 方式使用PHP时才有意义。
; [提示]可以在 httpd.conf 中使用 php_value/php_flag 与 php_admin_value/php_admin_flag 指令覆盖 php.ini 中的设置。

engine = On
; 是否启用PHP解析引擎。一般用于基于目录或虚拟主机来开关PHP解析引擎。

last_modified = Off
; 是否在"Last-Modified:"应答头中放置PHP脚本的最后修改时间。

xbithack = Off
; 是否不管文件的扩展名是什么,只要带有可执行位,就都作为PHP脚本解析。

[fpm-fcgi]
; 此配置段中的指令仅在以 FPM/FastCGI 方式使用PHP时才有意义。

cgi.check_shebang_line = On
; 是否检查脚本顶部以 #! 开始的行(shebang)。
; 如果脚本想要既能够单独运行又能够在 PHP CGI 模式下运行,那么这个起始行(shebang)就是必须的。
; 设为 On 表示在CGI模式下将会自动忽略这一行。

cgi.discard_path = Off
; 是否允许把 PHP CGI 目录放置在 web 目录树之外以增强安全性,这样客户端将无法避开 .htaccess 安全防护。

cgi.fix_pathinfo = On
; 是否为CGI提供真正的 PATH_INFO/PATH_TRANSLATED 值(遵守cgi规范)。
; 先前的行为是无论 PATH_INFO 是什么,一律将 PATH_TRANSLATED 设为 SCRIPT_FILENAME 。
; 打开此指令将使PHP修正其路径以遵守CGI规范,否则仍将使用旧式的不合规范的行为。
; 鼓励你打开此指令,并修正脚本以使用 SCRIPT_FILENAME 代替 PATH_TRANSLATED 。
; [提示]即使将 PHP-FPM 与 Nginx 配合使用,也应该保持此指令为 On (网上有许多老旧文章)。
; 有关 PATH_INFO 的更多信息请参见cgi规范。

cgi.force_redirect = On
; 是否打开cgi强制重定向。强烈建议打开它以提高安全性。
; 注意:在IIS上必须关闭它!

cgi.nph = Off
; 在CGI模式下是否强制对所有请求都发送"Status: 200"状态码。

cgi.redirect_status_env =
; 如果 cgi.force_redirect = On 并且与非Apache配合运行PHP,
; 可能需要设置一个cgi重定向环境变量名,PHP将根据此环境变量决定是否继续执行下去。
; 设置这个变量会导致安全漏洞,请务必在设置前搞清楚自己在做什么。

cgi.rfc2616_headers = Off
; 指定PHP在发送HTTP响应码时使用何种状态头。
; 设为 Off 表示使用符合RFC3875标准的头(例如"Status: 404 Not Found"),Apache和其它web服务器都支持。
; 设为 On  表示使用符合RFC2616标准的头(例如"HTTP/1.0 404 Not found")。
; 务必保持默认值 Off ,除非你确实知道自己在做什么。

fastcgi.error_header =
; 如果 display_errors = Off 并且被访问的php脚本包含语法错误,
; 那么默认情况下,用户将会收到一个状态行为"HTTP/1.1 500 Internal Server Error"的空页面。
; 如果你认为默认的状态行不合理,那么可以使用此指令自定义一个状态行(例如 "HTTP/1.1 550 Server Exploded")。

fastcgi.impersonate = Off
; IIS中的FastCGI支持模仿客户端安全令牌的能力,这使得IIS能够定义运行时请求所基于的安全上下文。
; 但Apache不支持此特性。如果在IIS中运行则应设为 On ,否则应设为 Off 。

fastcgi.logging = On
; 是否开启FastCGI日志。

fpm.config =
; 明确指定 FPM 配置文件(php-fpm.conf)的路径

[cli-server]
; 此配置段中的指令仅在使用PHP内建的 CLI Web Server 时才有效。

cli_server.color = Off
; 是否让 CLI Web Server 在终端输出中使用彩色。

[cli]
; 此配置段中的指令仅在使用PHP命令行模式时才有意义(实际是在设置 readline 模块)。

cli.pager =
; 显示命令行输出的外部分页程序。

cli.prompt = "\b \>"
; 以交互方式使用时的命令行提示符。

;;;;;;;;;;;;;;;;;;;
;;     核心      ;;
;;;;;;;;;;;;;;;;;;;

[Core-Language]

short_open_tag = On
; 是否允许使用"<? ?>"短标记。
; 除非你的php程序仅在受控环境下运行,且只供自己使用,否则请不要使用短标记。
; 如果要和XML结合使用PHP,可以选择关闭此选项以方便直接嵌入"<?xml ... ?>"。
; 本指令不影响缩写形式"<?=",它始终和"<?php echo"等价。

precision = 14
; 浮点型数据的显示精度(有效位数)。

serialize_precision = -1
; 将浮点型和双精度型数据序列化存储时的精度(有效位数)。
; 默认值 -1 表示自动选择最佳精度,能够恰好确保浮点型数据被解序列化程序解码时不会丢失数据。
; 此值还影响 json_encode() 编码双精度型数据的精度。

disable_functions =
; 该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。
; 该指令仅能禁用内置函数,不能禁用用户自定义函数。

disable_classes =
; 该指令接受一个用逗号分隔的类名列表,以禁用特定的类。

expose_php = On
; 是否暴露PHP被安装在服务器上的事实(在http头中加上其签名)。
; 它不会有安全上的直接威胁,但它使得客户端知道服务器上安装了PHP。

hard_timeout = 2
; 当脚本执行时间达到 max_execution_time 限制之后会被"柔软且安全"的结束,
; 此指令就是设置这种"柔软且安全"的方式结束脚本的最大允许用时(秒)。
; 一旦超时(默认为2秒),就会被进一步以粗暴的方式结束(不释放任何未释放的资源)。

zend.assertions = 1
; 如何编译断言:
; -1 完全不编译(生产模式)
;  0 编译但是在运行时跳过
;  1 编译并执行(开发模式)

zend.exception_ignore_args = Off
; 是否从异常生成的堆栈跟踪中排除参数。
; 建议在生产服务器上设为 On 以防止在堆栈跟踪中输出敏感信息。

zend.exception_string_param_max_len = 15
; 堆栈跟踪参数中允许的最大字符串长度(取值范围=0~1000000)。
; 仅在 zend.exception_ignore_args = Off 时有意义。
; 建议在生产服务器上设为 0 以减少敏感信息的输出。

zend.multibyte = Off
; 是否允许PHP脚本使用例如 CP936, Big5, CP949, Shift_JIS 这样的不安全字符编码。
; 与 ISO-8859-1 兼容的安全字符编码(UTF-8, EUC, ...)不需要开启此指令。
; 若要使用此特性,必须加载 mbstring 扩展模块。

zend.script_encoding =
; 当PHP脚本第一行没有"declare(encoding=...)"声明时,默认使用的字符编码。
; 设置此指令之后,脚本就像自动使用了 mb_convert_encoding() 函数一样,
; 将所有字符串从 zend.script_enconding 编码自动转换为 mbstring.internal_encoding 编码。
; 仅在 zend.multibyte = On 时有意义。
; 如果脚本使用了与 ISO-8859-1 不兼容的字符编码,建议明确设置此指令。

zend.detect_unicode = On
; 是否通过检查脚本的BOM(字节顺序标记)来检测脚本是否包含多字节字符。
; 仅在 zend.multibyte = On 时有意义。

zend.signal_check = Off
; 是否在关闭时检查被替换的信号处理程序(仅存在于Unix平台)

[Core-ResourceLimits]

memory_limit = 128M
; 脚本所能够申请到的最大内存(字节)(可以使用K和M作为单位)(必须大于 post_max_size 的值)。
; 这有助于防止劣质脚本消耗完服务器上的所有内存。设为 -1 表示取消内存限制。
; 设置了该指令后,memory_get_usage() 函数将变为可用。

[Core-Performance]

realpath_cache_size = 4M
; 指定PHP使用的 realpath(规范化的绝对路径名) 缓冲区大小。
; 缓冲区大小=路径字符串的总长度+缓存项关联数据。主要缓存长路径时,缓存必须更大。
; 此值并不能直接控制缓存中的路径数量。在PHP打开大量文件的系统上应当增大该值以提高性能。
; 注意:开启 open_basedir 之后 realpath 缓存将会被禁用。

realpath_cache_ttl = 120
; realpath 缓存有效期(秒)。对文件很少变动的系统,可以增大该值以提高性能。

[Core-DataHandling]

arg_separator.output = "&"
; PHP输出的URL中用来分隔参数的分隔符。
; 另外还可以设为"&amp;"或","或";"等等。

arg_separator.input = "&"
; PHP解析URL中的变量时使用的分隔符列表。字符串中的每一个字符都会被当作分割符。
; 另外还可以设为";,&"等等。

variables_order = "EGPCS"
; 注册哪些超全局数组。分别用 E, G, P, C, S 表示 $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER 。
; 因为注册这些数组会带来性能损失,并且 $_ENV 也不常用,所以不建议注册 $_ENV 。
; [提示]在FastCGI模式下 $_SERVER 中始终包含有环境变量(也就是 S 永远相当于 ES )。
; 推荐设为"GPCS",并使用 getenv() 访问环境变量。

request_order =
; 如何将 G, P, C 超全局数组中的元素注册到 $_REQUEST 超全局数组中。
; 此设置不但决定了注册 G, P, C 中的哪几个,还决定了注册时的覆盖顺序(后值会覆盖前值)。
; [注意]设为空表示继承 variables_order 的值,而不是让 $_REQUEST 为空。建议设为"GP"。

auto_globals_jit = On
; 是否仅在实际使用到 $_ENV, $_REQUEST, $_SERVER 变量时才创建(而不是在脚本一启动时就自动创建)。
; 如果并未在脚本中使用这些数组,打开该指令将会获得性能上的提升。

register_argc_argv = On
; 是否注册 $argv 与 $argc 全局变量(可能包含GET方法的信息)。
; $argv 数组包含所有传递给脚本的参数。$argc 变量保存了参数的个数。
; 建议并关掉该指令以提高性能。
; [提示]对于 CLI 模式,此指令被硬编码为 On

enable_post_data_reading = On
; 是否允许读取 POST 数据。设为 Off 之后 $_POST 与 $_FILES 将永远为空。
; 唯一的办法是通过 php://input 流包装器来获取POST数据。
; Off 仅适用于代理请求或以内存高效的方式处理POST数据。

post_max_size = 8M
; 允许接受的最大POST数据长度(字节)("0"表示无限)。仅在 enable_post_data_reading = On 时有意义。
; 此设定也影响到文件上传(必须大于 upload_max_filesize 的值),如果POST数据超出限制,那么 $_POST 和 $_FILES 将会为空。
; 如果启用了内存限制,那么该值应当小于 memory_limit 的值。

auto_prepend_file =
auto_append_file  =
; 自动在PHP脚本之前/之后插入的文件名。设为空表示禁用该特性。
; 指定的文件就像被 include() 函数包含进来一样,因此会使用 include_path 指令的值。
; 注意:如果脚本通过 exit() 终止,那么自动后缀将不会发生。

default_mimetype = "text/html"
default_charset = "UTF-8"
; 设置HTTP头 "Content-Type:" 的默认值。都设为空表示不输出"Content-Type:"头。
; 默认值表示输出"Content-Type: text/html; charset=UTF-8"。
; 反对将 default_charset 设为空。

input_encoding =
; PHP输入使用的字符编码。设为空表示使用 default_charset 的值。

output_encoding =
; PHP输出使用的字符编码。设为空表示使用 default_charset 的值。

internal_encoding =
; PHP内部使用的字符编码。设为空表示使用 default_charset 的值。

[Core-Paths]

include_path = ".;/path/to/php/pear"
; 指定一组目录用于 require(), include(), fopen(), file(), readfile(), file_get_contents() ... 等函数定位文件。
; 格式和系统的PATH环境变量类似(UNIX下用冒号分隔,Windows下用分号分隔):
; UNIX: "/path1:/path2"
; Windows: "\path1;\path2"
; 直接使用'./path/to/file'方式表示相对于当前目录的文件是一种效率更高的方式(不推荐在此指令中使用'.')。
; 更进一步,将此指令设为空有助于提高在文件系统上定位文件的性能。
; 可以使用 set_include_path() 在运行时修改此指令的值。

open_basedir =
; 将PHP允许操作的所有文件都限制在此组目录列表下以提升安全性(设为空表示允许打开所有文件)。
; 当脚本试图打开指定目录树之外的文件时,将遭到拒绝。
; 所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
; 特殊值'.'表示存放该脚本的目录将被当做基准目录,但这样做很不安全(脚本可以用chdir()更改工作目录)。
; 对于共享服务器,在 httpd.conf 中针对不同的虚拟主机或目录灵活设置该指令将变得非常有用。
; 作为Apache模块时,父目录中的 open_basedir 路径将自动被继承。
; 在Windows中用分号分隔目录,UNIX系统中用冒号分隔目录,建议使用 PATH_SEPARATOR 常量编写可移植代码。
; 注意:开启此特性之后 realpath 缓存将会被禁用。

doc_root =
; PHP的"CGI根目录"。仅在非空时有效。
; 在web服务器的主文档目录(比如"htdocs")中放置可执行程序/脚本被认为是不安全的,
; 比如因为配置错误而将脚本作为普通的html显示。
; 因此很多系统管理员都会在主文档目录之外专门设置一个只能通过CGI来访问的目录,
; 该目录中的内容只会被解析而不会原样显示。
; 如果设置了此指令,那么PHP就只会解释 doc_root 目录下的文件,
; 并确保目录外的脚本都不会被PHP解释器执行( user_dir 除外)。
; 如果编译PHP时没有指定 FORCE_REDIRECT ,那么必须设置此指令。
; 如果在非IIS服务器上以CGI方式运行,务必阅读手册中的安全部分。
; 确保安全的替代方案是使用 cgi.force_redirect 指令。

user_dir =
; 告诉php在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效。
; 也就是在用户目录之下使用PHP文件的基本目录名,例如:"public_php"

user_ini.cache_ttl = 300
; 重新读取 .user.ini 文件的间隔秒数( .user.ini 文件的生存期)。

user_ini.filename = ".user.ini"
; 基于每个目录的用户自定义 php.ini 文件的名称(仅支持 CGI/FastCGI 模式)。设为空表示关闭此功能。
; 开启此功能之后,除了主 php.ini 之外,还会从被执行的 PHP 脚本所在目录开始,一直向上扫描到 web 根目录。
; 如果被执行的 PHP 脚本在 web 根目录之外,那么只扫描该 PHP 脚本所在的目录。
; 仅允许在 .user.ini 文件中使用 PHP_INI_PERDIR 和 PHP_INI_USER 类型的指令。
; 开启此功能会让 PECL 的 htscanner 扩展作废。

extension_dir = "/path/to/phpext"
; 存放扩展库(模块)的目录,也就是PHP用来寻找动态扩展模块的目录。
; Windows下默认为"C:\php\ext"
; Unix下的默认值取决于编译时的配置。

sys_temp_dir = "/path/to/tmp"
; 存放临时文件的临时目录。默认为系统的临时目录(参见 sys_get_temp_dir() 函数)

;extension=PHP模块名(不含前后缀,例如 mbstring )
;zend_extension=Zend模块名(不含前后缀,例如 opcache )
; 对于不在 extension_dir 目录中的模块可以直接写上模块文件的完整绝对路径。
; [注意] exif 模块必须在 mbstring 之后加载

[Core-FileUploads]

file_uploads = On
; 是否允许HTTP文件上传。参见 upload_max_filesize, upload_tmp_dir, post_max_size 指令。

upload_tmp_dir =
; 存放上传文件的临时目录(必须是PHP进程可写的目录)。设为空表示使用系统默认的临时目录。
; 如果指定的目录不可写,将会自动使用系统默认的临时目录。
; 如果设置了 open_basedir ,那么其中必须包含系统默认的临时目录,否则上传功能将无法使用。

upload_max_filesize = 2M
; 允许上传的文件最大尺寸(必须小于 post_max_size 的值)。

max_file_uploads = 20
; 一次HTTP请求允许同时上传的最大文件数量。

[Core-Windows]

windows.show_crt_warning = Off
; 是否显示C运行时的警告消息(仅存在于Windows平台)

;;;;;;;;;;;;;;;;;;;;;
;;    核心扩展    ;;
;;;;;;;;;;;;;;;;;;;;;

[DateTime]
; 前四个配置选项目前仅用于 date_sunrise()date_sunset() 函数。

date.default_latitude = 31.7667
; 默认纬度
date.default_longitude = 35.2333
; 默认经度
date.sunrise_zenith = 90.833333
; 默认日出天顶
date.sunset_zenith = 90.833333
; 默认日落天顶

date.timezone =
; 未设定TZ环境变量时用于所有日期和时间函数的默认时区。
; 中国大陆应当使用"PRC"或"Asia/Shanghai"
; 应用时区的优先顺序为:
; 1. 用 date_default_timezone_set() 函数设定的时区(如果设定了的话)
; 2. TZ 环境变量(如果非空的话)
; 3. 该指令的值(如果设定了的话)
; 4. PHP自己推测(如果操作系统支持)
; 5. 如果以上都不成功,则使用 "UTC"

[ErrorHandling]

error_reporting = E_ALL
; 错误报告应该包含的内容(位字段的叠加):
;     1  E_ERROR             致命的运行时错误
;     2  E_WARNING           运行时警告(非致命性错误)
;     4  E_PARSE             编译时解析错误
;     8  E_NOTICE            运行时提醒(经常是bug,也可能是有意的)
;    16  E_CORE_ERROR        PHP启动时初始化过程中的致命错误
;    32  E_CORE_WARNING      PHP启动时初始化过程中的警告(非致命性错)
;    64  E_COMPILE_ERROR     编译时致命性错
;   128  E_COMPILE_WARNING   编译时警告(非致命性错)
;   256  E_USER_ERROR        用户自定义的致命错误
;   512  E_USER_WARNING      用户自定义的警告(非致命性错误)
;  1024  E_USER_NOTICE       用户自定义的提醒(经常是bug,也可能是有意的)
;  2048  E_STRICT            编码标准化警告(建议如何修改以向前兼容)
;  4096  E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同 E_ERROR
;  8192  E_DEPRECATED        对在未来版本中可能无法正常工作的代码给出警告
; 16384  E_USER_DEPRECATED   用户自定义的警告(对在未来版本中可能无法正常工作的代码给出警告)
; 32767  E_ALL               上述所有错误与警告
; [注意]不能在 php.ini 之外使用这些常量(必须使用数值)。
; 开发环境可设为 2147483647(所有二进制位全为1) 打开现在或将来可能出现的各种错误与警告。
; 在生产服务器上建议设为 E_ALL & ~E_DEPRECATED & ~E_STRICT 以避免过多的性能损失。
; 若想进一步提升性能,可以考虑设为 E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (仅包含错误)

display_errors = On
; 是否将错误信息作为输出的一部分显示。
; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替。
; 在最终发布的web站点打开这个特性可能暴露一些敏感信息。
; 特殊值 STDOUT 与 STDERR 仅可用于 CGI/CLI 模式(CLI模式默认值=STDOUT)。

display_startup_errors = On
; 是否显示PHP启动时的错误(PHP7默认值=Off)。
; 即使 display_errors = On ,关闭此参数也不显示PHP启动时的错误。
; 在生产服务器上建议关掉这个特性以避免泄漏敏感的配置信息。

log_errors = Off
; 是否将错误信息记录到 error_log 指定的目标。
; 强烈建议你在生产环境使用日志记录错误而不是直接输出,
; 这样可以让你既知道那里出了问题,又不会暴露敏感信息。
;  FPM/FastCGI 模式的默认值=On

log_errors_max_len = 1024
; 允许记录错误信息的最大字节长度。设为 0 可以允许无限长度。

ignore_repeated_errors = Off
; 是否忽略重复的错误信息。
; 错误信息必须出现在同一脚本的同一行才被被视为重复(除非 ignore_repeated_source = On)。

ignore_repeated_source = Off
; 当 ignore_repeated_errors = On 时,是否忽略错误消息的来源(忽略来自不同代码的相同错误消息)。

report_memleaks = On
; 是否报告内存泄漏。这个参数只在以调试方式编译的PHP中起作用,
; 并且必须在 error_reporting 指令中包含 E_WARNING

report_zend_debug = Off
; 尚无说明文档 (PHP7 的 Apache/FPM/FastCGI 模式默认值=On)

html_errors = On
; 是否在出错信息中使用HTML标记。
; 在需要记录错误日志的时候不要使用这个特性!
; [提示]对于 CLI 模式,此指令被硬编码为 Off

xmlrpc_errors = Off
; 是否将错误报告的格式设置为XML-RPC错误信息的格式(关闭正常的错误报告)。

xmlrpc_error_number = 0
; XML-RPC faultCode 元素的值(仅在 xmlrpc_errors = On 时有意义)。

docref_root =  ;"https://www.php.net/manual/zh/"
docref_ext =   ;".php"
; 如果 html_errors = On 并且设置了 docref_root ,那么PHP将会在出错信息上显示超连接。
; 直接链接到一个说明这个错误或者导致这个错误的函数的页面。
; 你可以下载php手册之后,将 docref_root 指令指向你本地的手册所在的URL目录。
; 你还必须设置 docref_ext 指令来指定文件的扩展名(必须含有'.')。
; [注意]不要在生产服务器上使用这个特性。

error_prepend_string =  ;"<span style='color: #ff0000'>"
error_append_string =   ;"</span>"
; 附加在错误信息前后的字符串(一般用于添加颜色)

error_log =
; 设置记录错误日志的目标。如果是一个文件(推荐做法),那么必须拥有写权限。
; 设为 syslog 表示记录到系统日志中(NT下的事件日志, Unix下的syslog(3))
; 设为空表示:Apache错误日志(apache2handler)、标准错误(CLI)、不记录(FPM)。
;  FPM/FastCGI 模式的默认值="/var/log/php-fpm/www-error.log"(RHEL/CentOS)

syslog.facility = LOG_USER
; 系统日志中的 facility 字段值(产生日志的子系统)。
; 仅在 error_log = syslog 时有意义。

syslog.filter = no-ctrl
; 过滤(转义为"\x???")日志消息中的哪些不安全字符:
;    ascii (仅允许 ASCII 字符与 NL 字符)
;    no-ctrl (允许所有非控制字符)
;    all (允许所有字符)
;    raw (允许所有字符,但不在换行符处分割日志消息)
; 仅在 error_log = syslog 时有意义。

syslog.ident = php
; 系统日志中的 ident 字段值(日志消息前缀[识别字符串])。
; 仅在 error_log = syslog 时有意义。

[FileStream]

allow_url_fopen = On
; 是否允许将URL(例如 http:// 或 ftp://)当作文件使用。

allow_url_include = Off
; 是否允许 include/require URL(例如 http:// 或 ftp://)。

user_agent =
; PHP访问URL时使用的"User-Agent"字符串

default_socket_timeout = 60
; socket 流的默认超时秒数

from =
; 定义匿名ftp的密码(一个email地址)

auto_detect_line_endings = Off
; 是否让PHP自动侦测行结束符(EOL)。
; 如果的你脚本必须处理Macintosh文件,或者你运行在Macintosh上,同时又要处理unix或win32文件,
; 打开这个指令可以让PHP自动侦测EOL,以便 fgets() 和 file() 函数可以正常工作。
; 但同时也会导致在Unix系统下使用回车符(CR)作为项目分隔符的人遭遇不兼容行为。
; 另外,在检测第一行的EOL习惯时会有很小的性能损失。

[Filter]
;extension=filter
; 对来源不可靠的数据进行确认和过滤。

filter.default = unsafe_raw
; 使用指定的过滤器过滤 $_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER 数据( unsafe_raw 表示不做任何过滤)。
; 原始数据可以通过 filter_input() 函数访问。

filter.default_flags =
; 默认的过滤标志[OptionsInfo]

assert.active = On
; 是否启用 assert() 断言评估。

assert.bail = Off
; 是否在发生失败断言时中止脚本的执行

assert.warning = On
; 是否为每个失败断言都发出警告

assert.callback =
; 发生失败断言时执行的回调函数

assert.exception = On
; 是否在断言失败时抛出 AssertionError 异常
; PHP7的默认值=Off

enable_dl = On
; 是否允许使用dl()函数。dl()函数仅在将PHP作为apache模块安装时才有效。
; 禁用dl()函数主要是出于安全考虑,因为它可以绕过 open_basedir 指令的限制。
; 这个特性将来肯定会被移除。强烈建议设为 Off 。

max_execution_time = 30
; 每个脚本允许的最大执行时间(秒),0 表示没有限制。
; 这个参数有助于阻止劣质脚本无休止的占用服务器资源。
; 该指令仅影响脚本本身的运行时间,任何其它花费在脚本运行之外的时间,
; 例如 system()/sleep()函数、数据库查询、文件上传等,都不包括在内。
; [提示]对于 CLI 模式,此指令被硬编码为"0"(没有限制)
; [提示]不要将此指令设置为大于 Apache 的 Timeout 指令(可能提前中断 PHP 的执行)。

max_input_time = -1
; 每个脚本接收输入数据(POST, GET, upload)的最大允许时间(秒)。
; -1 表示不限制。在生产服务器上应该限制为一个明确的值以阻止脚本无限运行。
; 如果用户的网速较慢且需要上传大文件,那么应该设置一个较大的数值。
; [提示]对于 CLI 模式,此指令被硬编码为"-1"(没有限制)

max_input_nesting_level = 64
; 输入变量($_GET, $_POST, $_COOKIE ...)的最大嵌套深度

max_input_vars = 1000
; 输入变量($_GET, $_POST, $_COOKIE ...)的最大总成员数。
; 此指令减轻了以哈希碰撞来进行拒绝服务攻击的可能性
; 超过限定数量的输入变量将会被截断,并导致 E_WARNING 产生。

zend.enable_gc = On
; 是否开启循环引用记数搜集器(垃圾回收)。关闭此指令可能会导致内存泄漏。

[Mail]

mail.add_x_header = Off
; 是否添加 X-PHP-Originating-Script: 邮件头,以包含"脚本UID + 文件名"信息

mail.force_extra_parameters =
; 强制指定 mail() 函数的第5个参数。

mail.log =
; 如何记录对 mail() 函数的调用。设为空表示不记录。
; 可以设为一个文件路径表示记录到文件,也可以设为 syslog 表示记录到系统日志。

SMTP = "localhost"
; mail() 函数中用来发送邮件的SMTP服务器的主机名称或者IP地址(仅用于Windows)。

smtp_port = 25
; SMTP服务器的端口号(仅用于Windows)。

sendmail_from =
; 发送邮件时使用的"From:"头中的邮件地址(仅用于win32)。
; 该选项还同时设置了"Return-Path:"头。

sendmail_path = /path/to/sendmail
; sendmail 程序的路径(包括命令行参数)。
; configure 脚本会尝试找到该程序并设定为默认值(通常是"/usr/sbin/sendmail -t -i"),但是如果失败的话,可以在这里手动设定。
; 不使用 sendmail 的系统应将此指令设定为 sendmail 替代程序(如果有的话)。
; 该指令在 Windows 平台上的默认值为空。
; 如果在 Windows 平台上设置了此指令,那么 smtp smtp_port sendmail_from 指令都会被忽略并运行此处指定的命令。

[Misc]

ignore_user_abort = Off
; 是否即使在用户中止请求后也坚持完成整个请求。
; 建议设为 On ,因为长请求可能会导致用户中途中止或浏览器超时。

highlight.comment = "#FF8000"
highlight.default = "#0000BB"
highlight.html = "#000000"
highlight.keyword = "#007700"
highlight.string = "#DD0000"
; 语法高亮模式的色彩(通常用于显示 .phps 文件)。
; 只要能被 <span style="color: ???????"> 接受,就能正常工作。

browscap =  ;"c:/windows/system32/inetsrv/browscap.ini"
; 浏览器功能文件的位置和文件名(只有PWS和IIS才需要这个设置)。

[OutputControl]

output_buffering = 0
; 输出缓冲区大小(字节)。建议值为4096[还可以通过 ob_start() 函数控制]。
; 输出缓冲允许你甚至在输出正文内容之后再发送HTTP头(包括cookies)。
; 设置输出缓冲有时可以减少网络数据包的发送(提升网络性能)。
; 这个参数的实际收益很大程度上取决于你使用的是什么Web服务器以及什么样的脚本。
; [提示]对于 CLI 模式,此指令被硬编码为"0"(禁用输出缓冲)

output_handler =
; 将所有脚本的输出重定向到一个输出处理函数。
; 例如,设为"mb_output_handler"重定向到 mb_output_handler() 函数时,字符编码将被透明地转换为指定的编码。
; 一旦在这里指定了输出处理程序,输出缓冲将被自动打开(缓冲区大小=无限)。
; 注意0: 此处仅能使用PHP内置函数,自定义函数应在脚本中使用 ob_start() 函数指定。
; 注意1: 可移植脚本不能依赖该指令,而应使用 ob_start() 函数明确指定输出处理函数。
;        不要轻易使用这个指令,否则可能会导致某些你不熟悉的脚本出错。
; 注意2: 不能同时使用"mb_output_handler"和"ob_iconv_handler"两个输出处理函数。
;        不能同时使用"ob_gzhandler"输出处理函数和"zlib.output_compression"指令。
; 注意3: 如果"zlib.output_compression = On",那么该指令必须为空(代之以"zlib.output_handler")。

implicit_flush = Off
; 是否要求PHP输出层在每个输出块之后自动刷写数据。
; 这等效于在每个 print()、echo()、HTML块 之后自动调用 flush() 函数。
; 打开这个选项对程序执行的性能有严重影响,只推荐在调试时使用。
; [提示]对于 CLI 模式,此指令被硬编码为"On"(强制自动刷写)

[PCRE]

pcre.backtrack_limit = 1000000
; 最大回溯(backtracking)深度。

pcre.recursion_limit = 100000
; 最大递归(recursion)深度。如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃。

pcre.jit = 1
; 是否开启PCRE库的 JIT(just-in-time) 编译。

[Phar]
;extension=phar
; 将PHP应用/类库打包以简化部署(以只读方式供他人使用)

phar.readonly = On
; 是否开启 Phar 只读模式。务必在生产环境开启此指令,否则会留下巨大的安全漏洞。

phar.require_hash = On
; 是否验证所有 Phar 归档的签名(防止归档内容被篡改)。建议开启以增强安全性。

phar.cache_list =
; 要在服务器启动阶段预解析的 Phar 归档列表(用于提升性能)。

[Session]

session.save_handler = files
; 存储和检索会话数据的存储处理器名字。默认为文件("files")。
; 设为"user"表示可以使用 session_set_save_handler() 注册自定义的存储处理器。
; 扩展模块可以注册新的存储处理器。所有已注册的存储处理器都可以通过 phpinfo() 查看。

session.save_path =
; 传递给 save_handler 的参数。对于 files 处理器表示存储会话数据文件的目录(默认为系统临时目录)。
; 可以使用"N;[MODE;]/path"模式定义该目录,可选的[MODE;]为8进制数表示的数据文件访问权限(默认为"600"),
; 整数N表示使用N层深度的子目录(而不是将所有数据文件都保存在同一个目录下),以提高大量会话的性能。
; 注意: (1)"N;[MODE;]/path"两边的双引号不能省略(因为";"是注释符)。(2)[MODE;]并不会改写进程的umask。
;       (3)PHP不会自动创建这些目录结构(可使用 ext/session 目录下的 mod_files.sh 脚本)。
;       (4)如果该目录(比如"/tmp")可以被不安全的用户读取或检索,那么将会带来安全漏洞(泄漏会话ID甚至会话数据)。
;       (5)当N>0时自动垃圾回收将会失效(详见 session.gc_* 指令)。
;       (6)仅在确实拥有海量会话时才可能需要设置N>2(每一层有64个子目录,N=3表示要创建64*64*64个子目录)。
;       (7)建议针对每个不同的虚拟主机分别设置各自不同的会话存储目录。
; FPM/FastCGI 模式的默认值="/var/lib/php/session"(RHEL/CentOS)

session.name = PHPSESSID
; 用在cookie里的会话ID标识名,只能包含字母和数字。

session.auto_start = Off
; 是否在客户访问任何页面时都自动初始化会话引擎。
; 因为类定义必须在会话启动之前被载入,所以打开这个选项之后就不能在会话中存放对象了。

session.serialize_handler = php
; 用来序列化/解序列化数据的处理器,可以使用"php","php_binary","php_serialize"。
; 推荐使用新式的"php_serialize"代替默认的老式"php"以避免某些限制和缺陷。
; [注意]一旦启用了WDDX支持,将只能使用"wddx"。

session.gc_probability = 1
session.gc_divisor = 100
; 定义在每次初始化会话时,启动垃圾回收程序的概率。
; 这个收集概率计算公式如下:session.gc_probability/session.gc_divisor
; 对会话页面访问越频繁,概率就应当越小。建议设为1/(1000~5000)。

session.gc_maxlifetime = 1440
; 超过此指令所指的秒数后,保存的数据将被视为'垃圾'并由垃圾回收程序清理。
; 判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。
; 如果多个脚本共享同一个 session.save_path 目录但 session.gc_maxlifetime 不同,
; 那么将以所有 session.gc_maxlifetime 指令中的最小值为准。
; 如果使用多层子目录来存储数据文件,垃圾回收程序不会自动启动。
; 你必须使用一个你自己编写的脚本、cron项或者其他办法来执行垃圾搜集。
; 比如,下面的脚本相当于设置了"session.gc_maxlifetime=1440" (24分钟):
; cd /path/to/sessions; find -cmin +24 | xargs rm

session.referer_check =
; 如果请求头中的"Referer:"字段不包含此处指定的字符串则会话ID将被视为无效。
; 注意:如果请求头中根本不存在"Referer:"字段的话,会话ID将仍将被视为有效。
; 默认为空,即不做检查(全部视为有效)。

session.use_strict_mode = 0
; 是否使用严格会话ID模式(拒绝未初始化的会话ID)。开启严格模式可以保护服务器免遭会话固定攻击。
; "严格模式"的含义是:如果浏览器发送了一个未初始化的会话ID,那么服务器将会回应一个新的已初始化的会话ID。
; 默认值"0"表示禁用严格模式。建议设为"1"开启此特性。

session.use_cookies = 1
; 是否使用cookie在客户端保存会话ID("1"表示启用、"0"表示禁用)。

session.use_only_cookies = 1
; 是否仅使用cookie在客户端保存会话ID("1"表示启用、"0"表示禁用)。
; 启用此特性可以避免使用URL传递会话ID带来的安全问题。
; 建议开启此选项以增强安全性。

session.cookie_lifetime = 0
; 传递会话ID的Cookie有效期(秒),"0"表示仅在浏览器打开期间有效。
; [提示]如果你不能保证服务器时间和客户端时间严格一致请不要改变此默认值!

session.cookie_path = /
; 传递会话ID的Cookie作用路径。

session.cookie_domain =
; 传递会话ID的Cookie的作用域(域名)。
; 默认值空表示根据cookie规范生成的主机名。

session.cookie_secure = 0
; 是否仅仅通过安全连接(https)发送cookie("1"表示启用、"0"表示禁用)。

session.cookie_httponly = 0
; 是否在cookie中添加httpOnly标志(仅允许HTTP协议访问)("1"表示启用、"0"表示禁用)。
; 启用此特性将导致客户端脚本(JavaScript等)无法访问该cookie。
; 打开该指令可以有效预防通过XSS攻击劫持会话ID。

session.cookie_samesite =
; 向cookie中添加SameSite属性的值("Strict", "Lax", "None" 之一[务必保留引号]),
; 允许服务器向客户端声明不应将此cookie用于跨站请求,这有助于预防跨站请求伪造(Cross-Site Request Forgery)。
; 并不是所有浏览器都支持此特性。设为空表示不随cookie一起发送SameSite属性。
; "Strict"表示同时禁止 POST 与 GET 跨站发送cookie
; "Lax"表示禁止 POST 跨站发送cookie 、但允许 GET 跨站发送cookie
; 详见 https://tools.ietf.org/html/draft-west-first-party-cookies-07

session.cache_limiter = nocache
; 指定会话页面的缓存控制策略(nocache|private|private_no_expire|public)。
; nocache 表示禁止客户端与代理服务器缓存; public 表示允许客户端与代理服务器缓存;
; private 表示允许客户端缓存但禁止代理服务器缓存;
; private_no_expire 与 private 相同,但不发送 "Expire:" 响应头(解决 Mozilla 等浏览器可能无法正确处理 Expire 响应头的BUG)。
; 设为空表示不发送任何与缓存策略相关的响应头。详见  session_cache_limiter() 函数。

session.cache_expire = 180
; 指定会话页面在客户端缓存中的有效期限(分钟)。当 session.cache_limiter = nocache 时,此设置无意义。

session.use_trans_sid = 0
; 是否使用明码在URL中显示SID(会话ID)("1"表示启用、"0"表示禁用)。
; 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,应当禁用。

session.trans_sid_tags = "a=href,area=href,frame=src,form="
; 指定重写哪些HTML标签来包含SID(仅在 session.use_trans_sid = On 时有意义)。
; <form> 标签比较特殊,如果你包含它,URL重写器将添加一个隐藏的 <input> 字段,
; 它包含了本应当额外追加到URL上的信息(<input hidden="session_id" name="session_name">)。
; <form> 标签的 action 属性中的URL不会被修改(除非明确指定了 action 属性)。
; 注意:所有合法的项都需要一个等号(即使后面没有值)。

session.trans_sid_hosts =
; 默认并不重写绝对URL,必须在运行时使用 ini_set() 指定目标域名才可以重写绝对URL。
; <form> 标签比较特殊,PHP 在检查 action 属性的URL时,会无视 session.trans_sid_tags 指令。
; 如果未指定任何域名,那么将会把 $_SERVER['HTTP_HOST'] 作为允许的域名。
; 可以使用逗号分隔一组域名,例如: php.net,www.php.net,wiki.php.net (禁止在其中包含空格)

session.sid_length = 32
; 会话ID字符串的长度(22~256)。建议最少使用32个字符长度(越长越安全)。

session.sid_bits_per_character = 4
; 定义会话ID中每个字符容纳几个哈希位(数字越大越安全)。取值范围:
;   4  (4 bits: 0-9, a-f)
;   5  (5 bits: 0-9, a-v)(推荐值)
;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")

url_rewriter.tags = "form="
; 实时URL重写(需要开启 output_buffering 支持)的目标标签。
; [注意]此指令的 session 功能已经被 session.trans_sid_tags 指令取代。

url_rewriter.hosts =
; 实时URL重写(需要开启 output_buffering 支持)的目标主机。
; 虽然此指令属于PHP核心部分,但是却用于Session模块的配置。
; 详见 session.trans_sid_hosts 指令。

session.upload_progress.enabled = On
; 是否利用 $_SESSION 数组跟踪上传进度。

session.upload_progress.cleanup = On
; 是否在读取完成全部POST数据之后(上传完成之后)立即清除上传进度信息。
; 强烈建议保持默认值 On

session.upload_progress.prefix = upload_progress_
; 在 $_SESSION 数组中用于跟踪上传进度的键名称前缀。
; 此前缀将会和 $_POST[ini_get("session.upload_progress.name")] 拼接在一起组成键名称。

session.upload_progress.name = PHP_SESSION_UPLOAD_PROGRESS
; 在 $_SESSION 数组中用于跟踪上传进度的键名称后缀。
; 如果 $_POST[ini_get("session.upload_progress.name")] 不存在,那么将不会跟踪上传进度。

session.upload_progress.freq = "1%"
; 以什么样的步长更新上传进度,可以设为百分比或字节数。

session.upload_progress.min_freq = 1
; 更新上传进度的最小时间间隔(秒)。

session.lazy_write = On
; 是否仅在会话数据发生变化时才向磁盘写入会话数据。

[Tokenizer]
;extension=tokenizer
; PHP源代码语法解析器

[Variable]

unserialize_callback_func =
; 如果解序列化处理器需要实例化一个未定义的类,
; 指定的回调函数将以该未定义类的名字作为参数被 unserialize() 调用,
; 以免得到不完整的"__PHP_Incomplete_Class"对象。
; 如果没有指定回调函数,或指定的回调函数不包含(或实现)那个未定义的类,将会显示警告信息。
; 所以仅在确实需要实现这样的回调函数时才设置该指令。
; 若要禁止这个特性,只需置空即可。

unserialize_max_depth = 4096
; 未序列化结构的默认最大深度限制。设置得太深可能会导致在解序列化期间堆栈溢出。
; 设为 0 表示没有深度限制。此设置可以在调用 unserialize() 时被 max_depth 参数覆盖。

;;;;;;;;;;;;;;;;;;;;;
;;    绑定扩展    ;;
;;;;;;;;;;;;;;;;;;;;;

;extension=bcmath
; 任意精度数学计算

;extension=calendar
; 在不同历法间进行转换

;extension=ctype
; 高效检测字符串是否仅包含指定类型的字符

;extension=mbstring
; 处理多字节字符串

;extension=exif
; 读取图片文件中的元数据
; exif 模块依赖于 mbstring 模块,必须在 mbstring 模块之后加载。

;extension=fileinfo
; 猜测文件的内容类型及编码

;extension=ftp
; FTP客户端

;extension=iconv
; 字符集转换

;extension=gd
; 图像处理

;extension=intl
; 国际化与本地化

;extension=shmop
; 操作 Unix 共享内存

;extension=sockets
; 网络套接字

;extension=sqlite3
; SQLite v3 数据库

;extension=zlib
; gzip 压缩与解压

;zend_extension=opcache
; 将预编译的字节码存储到共享内存中来提升性能(省去每次加载和解析PHP脚本的开销)

[BCMath]

bcmath.scale = 0
; 用于所有bcmath函数的默认 scale 参数的值(小数点后的小数保留位数)。

[Exif]

exif.encode_unicode = ISO-8859-15
; 编码UNICODE用户注释所使用的字符编码。默认值 ISO-8859-15 仅可用于大多数非亚洲国家。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码,
; 也可以设为空表示使用 mbstring.internal_encoding 指令的值。

exif.decode_unicode_intel = UCS-2LE
exif.decode_unicode_motorola = UCS-2BE
; 分别按照小端序(intel)/大端序(motorola)设置解码UNICODE用户注释所使用的字符编码。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码列表。不能设置为空。

exif.encode_jis =
; 编码JIS用户注释所使用的字符编码。
; 默认为空,表示使用 mbstring.internal_encoding 指令的值。

exif.decode_jis_intel = JIS
exif.decode_jis_motorola = JIS
; 分别按照小端序(intel)/大端序(motorola)设置解码JIS用户注释所使用的字符编码。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码列表。不能设置为空。

[iconv]

iconv.input_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 input_encoding 指令)

iconv.output_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 output_encoding 指令)

iconv.internal_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 internal_encoding 指令)

[GD]

gd.jpeg_ignore_warning = 1
; 是否忽略jpeg解码器的警告信息(比如无法识别图片格式)("1"表示启用、"0"表示禁用)。

[intl]

intl.default_locale =
; intl 函数(方法)的默认 ICU locale 值(不是操作系统的 locale)。
; 默认值为空,表示使用 ICU 的默认 locale 值。
; 因为一旦在 php.ini 中设置了此指令,就不能再重置为默认值,所以建议保持默认的空值,不要去明确设置它。

intl.error_level = 0
; intl 函数(方法)的错误消息等级。取值范围和 error_reporting 指令一致(例如 E_WARNING)。
; 默认值 0 表示禁止一切错误消息。此指令不会影响 intl 函数的返回值。
; 选中 E_ERROR 将会导致在 intl 函数(方法)出错时中止整个脚本的执行。

intl.use_exceptions = Off
; 是否在 intl 函数(方法)出错时抛出 IntlException 异常。
; 此功能可以和 intl.error_level 同时共存。

[mbstring]

mbstring.language = neutral
; 默认的NLS(本地语言设置),默认值"neutral"(UTF-8)表示中立,相当于Unicode(包含全部语言)。
; 建议不要修改此设置(除非不想将UTF-8用作内部编码)。
; 该指令必须放置在 mbstring.internal_encoding 指令之前。

mbstring.encoding_translation = Off
; 是否对进入的HTTP请求进行透明的编码转换,
; 也就是自动检测输入字符的编码并将其透明的转化为内部编码(default_charset)。
; 可移植的库或者程序千万不要依赖于自动编码转换。

mbstring.http_input =
mbstring.http_output =
mbstring.internal_encoding =
; 反对使用这些指令(已在 PHP 5.6.0 中废弃)(应使用 default_charset 指令)

mbstring.detect_order =
; 字符编码的默认检测顺序,接受一个逗号分隔的字符编码列表。
; 默认值取决于 mbstring.language 指令的值(多数是以"ASCII,UTF-8"开头的列表)。
; 设为"pass"表示不对字符编码进行任何转换。
; 对于简体中文为主的环境,可设为 "ASCII,UTF-8,EUC-CN,CP936,GB18030"。
; 参见 mb_detect_order() 函数。

mbstring.substitute_character =
; 为无效编码的字符定义替代字符。
; 设为一个整数表示替换为该整数对应的Unicode字符,设为空表示直接删除无效编码的字符,
; 设为一个字符串表示替换为该字符串。建议设为 9633 (豆腐块字符"□")。

mbstring.http_output_conv_mimetypes = "^(text/|application/xhtml\+xml)"
; 尚无文档

mbstring.strict_detection = Off
; 是否使用严谨的编码检测(因为浏览器可能以不同于页面的字符编码来提交表单)。
; 尽管浏览器能够根据HTML页面合理猜测字符编码,但明确设置 default_charset 指令效果更佳。
; 参见 mb_http_input() 函数(检测浏览器使用的字符编码)。

mbstring.regex_retry_limit = 1000000
mbstring.regex_stack_limit = 100000
; 尚无文档

[OPcache]

opcache.enable = On
; 是否启用操作码缓存。
; 只能通过 ini_set() 函数禁用此功能,不能通过 ini_set() 函数启用此功能。

opcache.enable_cli = Off
; 是否为CLI版本启用操作码缓存。仅用于调试目的。

opcache.memory_consumption = 128
; 最大允许 OPcache 占用的共享内存数量(以兆字节为单位[MB])。必须设为一个大于等于 8 的整数。

opcache.interned_strings_buffer = 8
; 用于存储预留字符串的内存大小(以兆字节为单位[MB])。必须设为一个正整数。

opcache.max_accelerated_files = 10000
; 允许在 OPcache 哈希表中缓存的最大文件数量(取值范围=200~1000000)。
; 实际取值范围是在质数集合{223,463,983,1979,3907,7963,16229,32531,65407,130987,262237,524521,1048793}
; 中找到的第一个大于等于设置值的质数,超出此范围的值将被自动修正到允许的范围内。

opcache.max_wasted_percentage = 5
; 最大允许浪费的内存百分比上限(取值范围=1~50)。一旦达到此上限,将会重置 OPcache 。

opcache.use_cwd = On
; On 表示以"脚本文件名+脚本的工作目录"作为 OPcache 哈希表的键。
; Off 表示仅以"脚本文件名"作为 OPcache 哈希表的键。
; 设为 On 可以避免同名脚本冲突(比较安全)。
; 设为 Off 可以提高 OPcache 的性能(可能会导致应用崩溃)。

opcache.validate_timestamps = On
; 是否每隔 opcache.revalidate_freq 秒检查一次脚本更新。
; 如果禁用此选项,那么必须使用 opcache_reset()opcache_invalidate() 函数手动重置 OPcache ,
; 或者通过重启服务来使文件系统更改生效。

opcache.revalidate_freq = 2
; 检查脚本更新的间隔秒数。设为 0 表示每次请求都检查。
; 仅在 opcache.validate_timestamps = On 时有意义。

opcache.revalidate_path = Off
; 是否检查 include_path 中的脚本路径。
; 设为 Off 表示重复使用 include_path 内的缓存文件(无法找到 include_path 之外的同名文件)。

opcache.save_comments = On
; 是否缓存脚本中的注释(舍弃注释可以减小缓存占用)。
; 设为 Off 可能会导致某些依赖注释的应用或框架无法正常工作(例如 Doctrine, Zend Framework 2, PHPUnit)。

opcache.enable_file_override = Off
; 是否优先使用 OPcache 检查文件状态(例如 file_exists(), is_file(), is_readable() ...)。
; 设为 On 可以提升检查速度,但在 opcache.validate_timestamps = Off 时可能会返回老旧的过期数据。

opcache.optimization_level = 0x7FFEBFFF
; 控制 OPcache 优化级别的二进制位掩码。

opcache.dups_fix = Off
; 仅用于解决 "Cannot redeclare class" 错误。

opcache.blacklist_filename =
; OPcache 黑名单(绝对路径)。黑名单是一个纯文本文件,
; 其中的每一行都是一个绝对路径(可以包含通配符、也可以只是路径前缀),
; 表示禁止缓存与此路径匹配的文件。以分号(;)开头的行将被视为注释而忽略。
; 下面是一个简单的黑名单示例:
;    ;匹配一个特定的文件
;    /var/www/broken.php
;    ;匹配 /var/www/ 目录下所有以 x 开头的文件
;    /var/www/x
;    ;通配符匹配
;    /var/www/*-broken.php

opcache.max_file_size = 0
; 允许缓存的最大文件尺寸(字节)。"0"表示不限。

opcache.consistency_checks = 0
; 每隔多少次请求检查一次缓存校验和。"0"表示不检查。
; 因为对性能有较大影响,所以仅应该用于调试目的,切勿用于生产服务器。

opcache.force_restart_timeout = 180
; OPcache 处于闲置状态超过多少秒之后将会被重启(闲置时间过长意味着 OPcache 可能有故障)。
; 如果 opcache.log_verbosity_level ≥ 2 ,那么当重启发生时将会在日志中记录一条警告信息。

opcache.error_log =
; OPcache 错误日志的记录目标(通常是一个文件路径)。
; 设为空等价于"stderr"(通常表示记录到Web服务器的错误日志中)。

opcache.log_verbosity_level = 1
; OPcache 日志级别: (0)致命 (1)错误 (2)警告 (3)信息 (4)调试

opcache.preferred_memory_model =
; OPcache 首选的内存模型。建议设为空(自动选择)。
; 取值范围: mmap, shm, posix, win32

opcache.protect_memory = Off
; 是否保护共享内存(避免执行脚本时发生非预期的写入)。仅用于内部调试。

opcache.mmap_base =
; 共享内存段的基地址(仅适用 Windows 平台)。所有PHP进程都将共享内存映射到相同的地址空间。
; 此指令用于手动修正"Unable to reattach to base address"错误。

opcache.restrict_api =
; 仅允许指定路径下的PHP脚本调用 OPcache API 函数。设为空表示不做限制。

opcache.file_update_protection = 2
; 禁止缓存最近几秒内(默认2秒)被修改的文件,以避免缓存不完整的文件(可能尚未完全落盘)。
; 如果文件系统本身能够确保文件更新是原子操作,那么可以设为 0 以提高站点性能。

opcache.huge_code_pages = Off
; 是否将PHP代码(文本段)拷贝到大页(HUGE PAGE)中。
; 使用大页可以提高性能,但这需要CPU与操作系统内核的支持以及额外的系统配置。

opcache.lockfile_path = /tmp
; 用来存储共享锁文件的绝对路径(仅适用 Unix 平台)。

opcache.opt_debug_level = 0
; 为了对不同阶段的优化情况进行调试,转储生成的操作码。"0"表示不转储。
; 设为 0x10000 表示输出优化前的操作码,设为 0x20000 表示输出优化后的操作码。

opcache.file_cache =
; 设置基于磁盘文件系统的二级缓存目录,设为空表示禁用二级缓存。
; 启用二级缓存可以在共享内存已满、服务器重启、重置共享内存时提高性能。

opcache.file_cache_only = Off
; 是否仅使用基于磁盘文件系统的二级缓存(不使用共享内存)。

opcache.file_cache_consistency_checks = On
; 当从基于磁盘文件系统的二级缓存中加载脚本时,是否检查文件的校验和。

opcache.file_cache_fallback = On
; 在进程无法附加到共享内存的时候,是否尝试使用基于磁盘文件系统的二级缓存(相当于隐式开启 opcache.file_cache_only )。
; 仅在已设置了 opcache.file_cache = 的情况下有意义。
; 注意:(1)仅适用于 Windows 平台;(2)禁用它可能会导致进程无法启动。

opcache.validate_permission = Off
; 是否验证当前用户对缓存文件的访问权限。

opcache.validate_root = Off
; 是否检查 chroot 环境中的名字冲突。
; 为了防止进程访问到 chroot 环境之外的文件,应该在 chroot 环境中启用此选项。

opcache.preload =
; 指定在服务启动时预先编译并缓存的PHP脚本(可以在脚本中通过 include 或 opcache_compile_file() 进一步预加载其他文件)。
; 所有被包含的函数、类等实体,在服务启动时就会被加载和缓存(开箱可用)。
; 此特性不支持 Windows 平台。

opcache.preload_user =
; 执行预加载操作的用户名(考虑到安全因素,禁止以 root 用户预加载代码)。
; 这些预加载的代码也只能以此用户身份运行。

opcache.record_warnings = Off
; On 表示脚本在每一次被 include 时都会记录与重放编译器警告。
; Off 表示脚本仅在第一次被缓存时才会发出编译器警告。

opcache.cache_id =
; 为此 OPcache 实例指定一个ID值(仅适用于 Windows 平台)。
; 所有具有相同 OPcache ID 与用户名的PHP进程共享同一个 OPcache 实例。
; 此指令的目的在于允许同一个用户使用多个 OPcache 实例。

opcache.jit = tracing
opcache.jit_bisect_limit = 0
opcache.jit_blacklist_root_trace = 16
opcache.jit_blacklist_side_trace = 8
opcache.jit_buffer_size = 0
opcache.jit_debug = 0
opcache.jit_hot_func = 127
opcache.jit_hot_loop = 64
opcache.jit_hot_return = 8
opcache.jit_hot_side_exit = 8
opcache.jit_max_exit_counters = 8192
opcache.jit_max_loops_unroll = 8
opcache.jit_max_polymorphic_calls = 2
opcache.jit_max_recursive_calls = 2
opcache.jit_max_recursive_returns = 2
opcache.jit_max_root_traces = 1024
opcache.jit_max_side_traces = 128
opcache.jit_prof_threshold = 0.005
; 尚无文档(PHP8新增)

[SQLite3]

sqlite3.extension_dir =
; 存放 SQLite 扩展的目录。

sqlite3.defensive = On
; On 表示禁用SQL语言中能够损坏数据库文件的功能(禁止直接写入 schema, shadow, sqlite_dbpage 表)。

[Zlib]

zlib.output_compression = 0
; 压缩脚本输出结果的压缩缓冲区大小("0"表示关闭此特性)。
; 当浏览器发送"Accept-Encoding: gzip(deflate)"请求头时,
; "Content-Encoding: gzip(deflate)"和"Vary: Accept-Encoding"头将加入到应答头当中。若想得到更好的压缩效果,
; 应当指定一个较大的压缩缓冲区,同时开启 output_buffering 缓冲区(最佳值应略大于压缩缓冲区的压缩结果大小)。
; 如果启用了zlib输出压缩,那么必须使用 zlib.output_handler 代替 output_handler 指令(后者必须设为空)。

zlib.output_compression_level = -1
; 压缩级别,可用值为 0~9 ,0表示不压缩,值越高效果越好,但CPU占用越多。
; 默认值 -1 表示使用zlib内部的默认值(6)。

zlib.output_handler =
; 与 zlib.output_compression 指令配合使用的输出处理器。
; 可以使用的处理器有"zlib.inflate"(解压)或"zlib.deflate"(压缩)。
; 如果启用该指令则必须将 output_handler 指令设为空。

;;;;;;;;;;;;;;;;;;;;;
;;    外部扩展    ;;
;;;;;;;;;;;;;;;;;;;;;

;extension=bz2
; Bzip2 压缩与解压

;extension=curl
; http, ftp, telnet, ldap 客户端

;extension=dom
; 通过 DOM(Document Object Model) API 操作 XML 文档

;extension=gettext
; 通过 NLS(Native Language Support) API 国际化 PHP 程序

;extension=imap
; 邮件客户端(IMAP, POP3)

;extension=ldap
; LDAP(Lightweight Directory Access Protocol) 客户端

;extension=mysqlnd
;extension=mysqli
; MySQL 客户端(先加载 mysqlnd 后加载 mysqli )

;extension=openssl
; OpenSSL(加密、解密、签名、证书)

;extension=pgsql
; PostgreSQL 客户端

;extension=simplexml
; 一个简单易用的XML工具集

;extension=snmp
; 简单网络管理协议(Simple Network Management Protocol)

;extension=soap
; 简单对象访问协议(Simple Object Access Protocol)

;extension=xml
; XML 解析器

;extension=xmlreader
;extension=xmlwriter
; XML 读写

;extension=zip
; ZIP 压缩与解压

[cURL]

curl.cainfo =
; CURLOPT_CAINFO 选项的一个默认值。必须是一个绝对路径。

[IMAP]

imap.enable_insecure_rsh = Off
; 是否启用 rsh/ssh 登录支持。开启此选项会带来安全隐患。

[LDAP]

ldap.max_links = -1
; 每个进程允许开启的最大连接数。 -1 表示无限。

[MySQLnd]

mysqlnd.collect_statistics = On
; 是否收集各种客户端统计信息(可用于调校或监视)。
; 可以通过 mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() 访问这些统计信息。
; 也可以在 phpinfo() 页面上查看这些统计信息。
; 是否收集与内存用量相关的统计信息由 mysqlnd.collect_memory_statistics 指令控制。

mysqlnd.collect_memory_statistics = Off
; 是否收集与内存用量相关的客户端统计信息(可用于调校或监视)。
; 可以通过 mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() 访问这些统计信息。
; 也可以在 phpinfo() 页面上查看这些统计信息。

mysqlnd.debug =
; 此指令仅在以调试模式编译PHP时才有意义。

mysqlnd.log_mask = 0
; 指示记录哪些SQL查询。必须是下面这些表示查询类别的数字之和("0"表示不记录):
; SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16,
; SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128,
; SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512, SERVER_QUERY_WAS_SLOW=1024

mysqlnd.mempool_default_size = 16000
; 存放结果集的默认内存池大小(字节)。

mysqlnd.net_read_timeout = 86400
; 没有充分理解的情况下不要修改此指令的默认值。

mysqlnd.net_cmd_buffer_size = 4096
; 为每个连接预分配的命令缓冲区的大小(字节)。必须设为一个不小于 4096 的值。
; 建议设为一个较大的值(比如 8192 或 16384 或 32768)以提升性能。

mysqlnd.net_read_buffer_size = 32768
; 为每个连接预分配的读取缓冲区的大小(字节)。必须设为一个不小于 32768 的值。
; 建议设为一个较大的值(比如 65536 或 131072 或 262144)以提升性能。

mysqlnd.sha256_server_public_key =
; 用于 SHA-256 认证插件的 MySQL 服务器 RSA 公钥文件。
; 设置此指令之后,客户端就可以无需再设置 MySQL 服务器的 RSA 公钥,
; 否则客户端必须在运行时使用 mysqli_options() 设置 MySQL 服务器的 RSA 公钥。
; 如果客户端没有指定任何 RSA 公钥,那么将直接使用 SHA-256 认证插件接收到的服务器 RSA 公钥(不做有效性验证)。

mysqlnd.trace_alloc =
; 尚无文档

mysqlnd.fetch_data_copy = Off
; 是否强制将结果集从内部结果集缓冲区复制到PHP变量中(而不是使用默认的引用和写时复制逻辑)。
; 复制结果集(而不是让PHP变量应用它们)可以尽早释放先前为PHP变量分配的内存(减少内存占用),但会降低运行速度。
; 如果使用 PDO_MySQL ,切勿开启此特性。

[MySQLi]

mysqli.allow_local_infile = Off
; 是否允许使用 LOAD DATA 语句加载(PHP角度看的)本地文件。

mysqli.allow_persistent = On
; 是否允许创建持久连接。

mysqli.max_persistent = -1
; 允许创建的最大持久连接数。设为 -1 表示无限。

mysqli.max_links = -1
; 允许创建的最大连接数(持久和非持久)。设为 -1 表示无限。

mysqli.default_port = 3306
; 用于连接MySQL服务器的默认TCP端口号($port)。如果没有在这里指定默认值,将按如下顺序寻找:
; (1) $MYSQL_TCP_PORT 环境变量
; (2) /etc/services 文件中的 mysql-tcp 项(unix)
; (3) 编译时指定的 MYSQL_PORT 常量
; 注意:在 Windows 平台上只使用 MYSQL_PORT 常量。

mysqli.default_socket = /var/lib/mysql/mysql.sock
; 连接到本机 MySQL 服务器时所使用的默认套接字($socket)。
; 若未指定则使用 MySQL 内置的默认值。

mysqli.default_host =
; 连接到 MySQL 数据库时使用的默认主机名($host)。

mysqli.default_user =
; 连接到 MySQL 数据库时使用的默认用户名($username)。

mysqli.default_pw =
; 连接到 MySQL 数据库时使用的默认密码($passwd)。在配置文件中保存密码是个坏主意,
; 不但程序可以通过 echo get_cfg_var("mysqli.default_pw") 来显示密码,
; 而且任何对该配置文件有读权限的用户也能看到密码。

mysqli.reconnect = Off
; 是否允许在连接丢失时自动重新连接。

mysqli.rollback_on_cached_plink = Off
; On 表示在断开持久连接时,首先回滚此连接上所有已挂起的事务,然后再将此连接放回永久连接池。
; Off 表示只有在重用连接或实际关闭连接时才会回滚挂起的事务。
; 因为 libmysqlclient 与 streams 对 MYSQL_OPT_READ_TIMEOUT 有着不同的理解,
; 所以用户不能通过API调用或运行时配置来设置 MYSQL_OPT_READ_TIMEOUT 。

[OpenSSL]

openssl.cafile =
; 本地文件系统上的CA(证书颁发机构)文件的路径,用于校验对端SSL证书的有效性。
; 设为空表示使用操作系统的管理的CA证书。

openssl.capath =
; 保存经过哈希处理的CA(证书颁发机构)文件的目录。
; 仅在 openssl.cafile 为空或指定的CA文件不存在时有意义。
; 设为空表示使用操作系统的管理的CA证书。

[PostgresSQL]

pgsql.allow_persistent = On
; 是否允许持久连接

pgsql.max_persistent = -1
; 每个进程中允许持有的最大持久连接数。-1 代表无限制。

pgsql.max_links = -1
; 每个进程允许持有的最大连接数(持久和非持久)。-1 代表无限制。

pgsql.auto_reset_persistent = Off
; 是否自动复位在 pg_pconnect() 上中断了的持久连接。检测需要一些额外开销。

pgsql.ignore_notice = Off
; 是否忽略 PostgreSQL 后端的提醒消息。
; 记录后端的提醒消息需要一些很小的额外开销。

pgsql.log_notice = Off
; 是否在日志中记录 PostgreSQL 后端的提醒消息。
; 仅在 pgsql.ignore_notice = Off 时有意义。

[SOAP]

soap.wsdl_cache_enabled = On
; 是否开启 WSDL 缓存

soap.wsdl_cache_dir = /tmp
; WSDL 缓存目录
; FPM/FastCGI 模式的默认值="/var/lib/php/wsdlcache"(RHEL/CentOS)

soap.wsdl_cache_ttl = 86400
; WSDL 缓存有效期(秒)

soap.wsdl_cache = 1
; WSDL 缓存类型:
; WSDL_CACHE_NONE (0), WSDL_CACHE_DISK (1), WSDL_CACHE_MEMORY (2), WSDL_CACHE_BOTH (3)

soap.wsdl_cache_limit = 5
; WSDL 内存缓存上限(最大允许在内存中缓存的WSDL文件数量)。
; 达到上限之后,最新缓存的文件将会挤掉最老的缓存文件。