应优先在phpEnv控制面板中定位当前PHP版本对应的php.ini文件,将zlib.output_compression = On、zlib.output_compression_level = 6、output_handler = ""(清空),保存后仅重启该PHP版本服务即可生效;需避免与Nginx gzip重复启用,并注意二进制输出可能被错误压缩。

phpEnv 是 Windows 下的 PHP 集成环境(类似 XAMPP、WampServer),它默认不开启 zlib.output_compression,所以你看到页面没压缩、响应头里没有 Content-Encoding: gzip,不是代码问题,而是这个开关根本没打开。
确认 phpEnv 当前使用的 php.ini 文件位置
phpEnv 多版本共存,每个 PHP 版本有独立的 php.ini,改错文件白忙活。在你的 phpEnv 控制面板里选中当前启用的 PHP 版本 → 点“配置” → 找到并打开标着 “PHP (php.ini)” 的那个配置文件。别信 phpinfo() 显示的 “Loaded Configuration File”,phpEnv 有时会加载额外的覆盖配置,以控制面板指向的为准。
修改 zlib.output_compression 和相关参数
在打开的 php.ini 中搜索以下三行,按顺序调整:
-
zlib.output_compression = On(必须设为On,不能是1或数字;设为数字如4096会启用但缓冲阈值生效,容易漏压小响应) -
zlib.output_compression_level = 6(范围 1–9,6是压缩率与 CPU 开销的合理平衡点;别设9,实测对 HTML/JS/CSS 提升不足 2%,但 CPU 占用翻倍) -
output_handler = ""(必须为空!如果这里写着ob_gzhandler或其他函数,删掉或清空,否则启动时直接报 Warning)
改完保存,**不要重启电脑,只需在 phpEnv 控制面板里重启对应 PHP 版本的服务(比如 “Restart PHP 8.2”)** —— Apache/Nginx 不用动,phpEnv 管理的是 PHP-FPM 进程。
验证是否真正生效,避开常见假阳性
别只看浏览器开发者工具 Network 标签页里的响应头,有些代理或调试插件会伪造 Content-Encoding: gzip。用命令行实测:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.php
如果返回头里同时包含:
Content-Encoding: gzipVary: Accept-Encoding-
Content-Length明显小于未加-H参数时的值(比如从 12KB → 4KB)
才算真正生效。另外注意:phpEnv 默认跑的是 PHP-FPM + Nginx 组合,Nginx 本身也有 gzip on 配置,如果它也开着,而你又开了 zlib.output_compression,就可能触发双重压缩或冲突 —— 此时应关掉 Nginx 的 gzip,只留 PHP 层压缩,更可控。
最易被忽略的一点:zlib.output_compression 对 header() 之后的输出、readfile() 输出的二进制文件(比如图片、PDF)也会尝试压缩,结果往往损坏。如果你有这类逻辑,要么关掉全局压缩,改用 ob_start('ob_gzhandler') 按需启用,要么在输出前手动 ini_set('zlib.output_compression', 'Off') 临时关闭。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











