engine = On
含义:是否启用 PHP 引擎。
实际意义:设为 Off 就相当于 PHP 完全罢工,这个网站跑不了 PHP。永远保持 On。
short_open_tag = Off
含义:是否允许 这种短标签。
为什么关:如果网站输出 XML, 会被 PHP 误当成 PHP 代码,导致解析错误。只用 最安全。
precision = 14
含义:浮点数显示的有效数字位数。
一般不动,除非你做金融计算需要更高精度。
output_buffering = 4096
含义:输出缓冲,PHP 先把输出攒到 4KB 再一次性发给浏览器。
好处:减少网络传输次数,提升性能。
注意:CLI 模式下强制为 Off。
;output_handler =
含义:自定义输出处理函数,比如自动做 gzip 压缩。
很少用,一般用 Web 服务器(IIS/Apache/Nginx)做压缩更高效。
zlib.output_compression = Off
含义:是否用 zlib 库自动压缩输出。
建议:保持 Off,让 Web 服务器做压缩,PHP 做会增加 CPU 负担。
implicit_flush = Off
含义:每次 echo/print 后自动 flush 到浏览器。
为什么关:严重影响性能,只有调试实时输出(比如进度条)时才开。
unserialize_callback_func =
含义:反序列化时遇到未定义的类,调用这个函数去自动加载。
高阶用法,一般配合 spl_autoload_register 使用。
;unserialize_max_depth = 4096
含义:反序列化嵌套深度限制,防无限递归导致栈溢出。
PHP 8+ 默认已有限制,一般不用改。
serialize_precision = -1
含义:序列化浮点数时的精度。-1 表示自动选最佳精度,确保反序列化后数值不变。保持默认。
open_basedir = "D:\0513;D:\php832;D:\php_upload_tmp;C:\Windows\Temp"
含义:限制 PHP 只能访问指定目录及其子目录。
安全神器:如果设置 open_basedir = "D:\www",PHP 就无法读取 C:\Windows\ 等系统目录。
副作用:会禁用 realpath 缓存,轻微影响性能。
disable_functions =
disable_classes =
含义:禁用某些危险函数/类。
常见用法:disable_functions = exec,system,passthru,shell_exec,proc_open,popen,dl,show_source,highlight_file
安全建议:生产环境建议禁用命令执行类函数。
zend.enable_gc = On
含义:启用循环引用垃圾回收器。
为什么开:PHP 的引用计数无法处理循环引用(A 引用 B,B 引用 A),GC 负责清理这些内存泄漏。
zend.exception_ignore_args = On
zend.exception_string_param_max_len = 0
含义:异常堆栈中不显示函数参数,字符串参数最多显示 0 个字符。
安全目的:防止异常信息里泄露数据库密码、Token 等敏感字符串。
expose_php = Off
含义:是否在 HTTP 响应头里暴露 X-Powered-By: PHP/8.3.2。
安全建议:改为 Off,不让攻击者知道你的 PHP 版本。
max_execution_time = 60
含义:单个 PHP 脚本最长执行时间(秒)。
注意:CLI 模式下强制为 0(无限)。
为什么调低:防止恶意/错误脚本无限运行,拖垮服务器。
max_input_time = 60
含义:PHP 解析 POST/GET/文件上传输入数据的最长时间。
与上面区别:max_execution_time 从脚本开始执行计时,max_input_time 从 PHP 开始接收数据计时。
memory_limit = 256M
含义:单个 PHP 进程最多使用多少内存。
重要:这不是 OPcache 的内存,是单个请求的内存上限。如果脚本内存超限,PHP 会直接报错退出。
;max_input_vars = 1000
含义:POST/GET/COOKIE 最多接受多少个输入变量。
什么时候改:如果表单里有大量复选框(比如一次提交 5000 个 ID),需要调大。
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
含义:报告所有错误,除了废弃警告和严格标准警告。
开发环境:用 E_ALL(什么都报)。
生产环境:当前值,避免日志被废弃函数调用刷屏。
display_errors = Off
display_startup_errors = Off
含义:是否把错误显示在网页上。
生产必须 Off:用户看到错误信息不仅体验差,还可能泄露数据库结构、文件路径。
log_errors = On
含义:把错误记录到日志文件。
生产必须 On:错误不显示,但必须记录下来供排查。
ignore_repeated_errors = Off
ignore_repeated_source = Off
含义:是否忽略重复错误。
建议:保持 Off,日志完整比省空间重要。
report_memleaks = On
含义:报告内存泄漏(仅在 debug 编译的 PHP 中有效)。保持默认。
;html_errors = On
含义:错误信息用 HTML 格式输出(带颜色、链接)。
生产保持注释(Off):日志里不需要 HTML 标签。
;error_log = php_errors.log
含义:错误日志文件路径。
variables_order = "GPCS"
含义:注册哪些超全局变量。G=GET, P=POST, C=COOKIE, S=SERVER, E=ENV。
生产去掉 E:环境变量很少在 Web 中用,省内存。
request_order = "GP"
含义:$_REQUEST 数组包含哪些来源。
默认只含 GET 和 POST,防止 COOKIE 覆盖 POST 数据。
register_argc_argv = Off
含义:是否在 Web 环境下注册 $argc 和 $argv(命令行参数)。
Web 下不需要,关掉省内存。
auto_globals_jit = On
含义:超全局变量($_GET, $_POST 等)延迟创建,用到时才初始化。
性能优化,保持 On。
post_max_size = 110M
含义:整个 POST 请求体(含所有文件和表单字段)的最大大小。
必须大于 upload_max_filesize。
auto_prepend_file =
auto_append_file =
含义:自动在每个 PHP 文件开头/结尾包含指定文件。
用途:比如自动加载公共库、自动插入页脚统计代码。
default_mimetype = "text/html"
default_charset = "UTF-8"
含义:默认 Content-Type 和字符集。
保持 UTF-8,现代网站标准。
;include_path = ".;c:\php\includes"
含义:include/require 找不到文件时,去这些目录找。
类似系统 PATH 环境变量。
doc_root =
user_dir =
含义:doc_root 是 PHP 页面的根目录;user_dir 是 ~/username 风格的用户目录。
一般不用,Web 服务器(IIS/Apache)已经配置好了根目录。
extension_dir = "D:\php832\ext"
含义:PHP 扩展(DLL 文件)存放目录。
Windows 必配,Linux 一般不用改(系统目录)。
enable_dl = Off
含义:是否允许运行时动态加载扩展(dl() 函数)。
安全建议:生产环境必须 Off,防止脚本加载恶意扩展。
;cgi.force_redirect = 1
;cgi.fix_pathinfo=1
;fastcgi.impersonate = 1
含义:CGI/FastCGI 相关安全选项。
IIS 用户注意:cgi.force_redirect 在 IIS 下必须关闭或注释。
file_uploads = On
含义:是否允许 HTTP 文件上传。
关掉就彻底不能上传了。
upload_tmp_dir = "D:\php_upload_tmp"
含义:上传文件的临时存放目录。
注意:这个目录必须存在,且 Web 服务器进程有写入权限。
upload_max_filesize = 100M
含义:单个上传文件的最大大小。
注意:必须小于 post_max_size。
max_file_uploads = 20
含义:单次请求最多上传多少个文件。
防攻击:防止有人一次上传几万个文件拖垮服务器。
allow_url_fopen = On
含义:是否允许 fopen/fread 打开远程 URL(如 http://example.com/file.txt)。
安全风险:如果代码里有 fopen($_GET['url']) 这种写法,可能被 SSRF 攻击利用。
建议:如果不需要,改为 Off。
allow_url_include = Off
含义:是否允许 include/require 远程 URL。
生产必须 Off:这是极危险的功能,攻击者可能让你包含恶意远程代码。
default_socket_timeout = 60
含义:网络流(socket)默认超时时间。
比如:file_get_contents('http://...') 最多等 60 秒。
extension=curl
extension=fileinfo
extension=gd
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=zip
zend_extension=opcache
含义:加载 PHP 扩展模块。
extension= 加载普通扩展(如 curl, gd)
zend_extension= 加载 Zend 扩展(只有 OPcache、Xdebug 等少数几个)
extension=curl 这种写法(不加 php_ 前缀和 .dll 后缀)是 PHP 7.2+ 的推荐写法,跨平台兼容。
cli_server.color = On
含义:PHP 内置的 CLI Web 服务器(php -S localhost:8000)是否用彩色输出。
只有开发时用内置服务器才有效,生产不用管。
date.timezone = Asia/Shanghai
含义:默认时区。
必须设置,否则 date() 等函数会报时区警告。
pdo_mysql.default_socket=
含义:连接本地 MySQL 时用的 Unix Socket 路径。
Windows 下无效,Windows 用 TCP/IP(localhost:3306)
session.save_handler = files
;session.save_path = "/tmp"
含义:Session 数据存哪里。files 表示存文件。
session.use_strict_mode = 1
session.use_cookies = 1
session.use_only_cookies = 1
含义:严格模式拒绝未初始化的 Session ID;只用 Cookie 传 Session ID,不用 URL。
安全:严格模式防 Session Fixation 攻击。
session.name = PHPSESSID
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_httponly = 1
session.cookie_samesite = "Lax"
含义:Session Cookie 的名字、有效期、路径、安全属性。
HttpOnly:禁止 JS 读取,防 XSS 窃取 Session。
SameSite=Lax:防止 CSRF 跨站请求伪造。
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
含义:垃圾回收概率 = 1/1000,Session 1440 秒(24 分钟)未活跃视为过期。
注意:Windows 下文件 Session 的 GC 可能不自动运行,需要手动清理或改用数据库存 Session。
zend.assertions = -1
含义:-1 表示完全不编译 assert 语句,零开销。
生产必须 -1,开发环境用 1。
[COM]
Windows 特有的 COM 组件支持,一般不用,除非你要操作 Excel、Word 等 Office 组件。
[mbstring]
多字节字符串处理(中文、日文等)。
关键:mbstring.internal_encoding 等已废弃,用全局的 default_charset 代替。
[gd]
图像处理库。gd.jpeg_ignore_warning 可以忽略 JPEG 解码警告。
[exif]
读取图片 EXIF 信息(拍摄时间、GPS 等)。
注意:exif 扩展必须在 mbstring 之后加载,因为依赖它。
[Tidy]
HTML 清理和修复。tidy.clean_output = Off 表示不自动清理输出。
SOAP Web Service 支持。
注意:soap.wsdl_cache_dir="/tmp" 在 Windows 下必须改成实际路径,比如 D:\php832\temp
[sysvshm]
System V 共享内存,Windows 不支持,忽略。
[ldap]
LDAP 目录服务连接。ldap.max_links = -1 表示连接数无限制。
[dba]
数据库抽象层(Berkeley DB 等),很少用。
opcache.enable=1
总开关
opcache.enable_cli=0
CLI 模式下不开(命令行脚本生命周期短,不需要缓存)
opcache.memory_consumption=128
共享内存大小(MB),缓存编译后的 opcode
opcache.interned_strings_buffer=8
字符串驻留内存,相同字符串只存一份
opcache.max_accelerated_files=10000
最多缓存多少个 PHP 文件
opcache.max_wasted_percentage=5
浪费内存超过 5% 时触发重启
opcache.use_cwd=1
把当前工作目录拼进缓存键,防同名文件冲突
opcache.validate_timestamps=1
是否检查文件是否被修改
opcache.revalidate_freq=2
每隔几秒检查一次
opcache.revalidate_path=0
不在 include_path 里搜索优化
opcache.save_comments=1
保留注释(Doctrine、Laravel 注解依赖)
opcache.record_warnings=0
不重复记录编译警告
opcache.enable_file_override=0
不优化 file_exists
opcache.optimization_level=0x7FFFBFFF
优化级别位掩码
opcache.dups_fix=0
不修复重复类/函数定义
opcache.blacklist_filename=
黑名单文件
opcache.max_file_size=0
不限制文件大小
opcache.force_restart_timeout=180
计划重启等待时间
opcache.error_log=
错误日志路径
opcache.log_verbosity_level=1
日志详细程度
opcache.file_cache_fallback=1
Windows 下共享内存失败回退到文件缓存
opcache.file_cache=
二级文件缓存目录
opcache.file_cache_only=0
不只使用文件缓存
opcache.file_cache_consistency_checks=1
文件缓存校验
opcache.huge_code_pages=0
HugePages(Linux 特性,Windows 无效)
opcache.validate_permission=0
不验证文件权限
opcache.validate_root=0
不处理 chroot
opcache.opt_debug_level=0
调试级别
opcache.preload=
预加载脚本(高级功能)
opcache.preload_user=
预加载用户(Linux)
opcache.file_update_protection=2
文件修改后 2 秒内不缓存(防半写入)
opcache.lockfile_path=/tmp
锁文件路径(Linux)
opcache.jit=tracing
JIT 模式:tracing(追踪热点代码)
opcache.jit_buffer_size=128M
JIT 缓存区,必须 > 0 JIT 才生效
curl.cainfo ="D:\php832\extras\ssl\cacert.pem"
openssl.cafile="D:\php832\extras\ssl\cacert.pem"
含义:HTTPS 请求时验证证书用的 CA 证书包路径。
必须配置:否则 file_get_contents('https://...') 或 cURL 请求会报证书验证失败。
ffi.enable=preload
含义:FFI(Foreign Function Interface)允许 PHP 直接调用 C 函数。
安全风险:preload 只允许在预加载文件和 CLI 中使用,防止 Web 脚本调用任意系统库。