精品软件与实用教程
;;;;;;;;;;;;;;;;;;
;; 关于 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] 的配置段表示仅作用于 http://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,可以选择关闭此选项以方便直接嵌入""。
; 本指令不影响缩写形式"=",它始终和"
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中用来分隔参数的分隔符。
; 另外还可以设为"&"或","或";"等等。
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 = ;""
error_append_string = ;""
; 附加在错误信息前后的字符串(一般用于添加颜色)
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 文件)。
; 只要能被 接受,就能正常工作。
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 时有意义)。
;