php 8.5.5 默认不启用 gzip 压缩,需在 php.ini 中设置 zlib.output_compression = on、zlib.output_compression_level = 6、output_buffering = 4096,并注释 zlib.output_handler,重启 apache 或 php-fpm 后通过 response headers 中 content-encoding: gzip 确认生效。

PHP 8.5.5 默认不启用 Gzip 压缩输出,但 zlib 扩展已内置启用,只要配置得当,响应体体积通常能减少 40%–70%,且无需改代码、不增加依赖。
php.ini 中启用 zlib.output_compression(推荐)
这是最稳定、覆盖全站的方式,由 PHP 内核在输出末尾统一压缩,不依赖脚本执行顺序,也规避了前置输出问题。
- 运行
php --ini或在项目中调用phpinfo(),确认Loaded Configuration File路径(phpEnv 用户注意:路径通常是C:\phpEnv\php\php-8.5.5\php.ini,不是系统 PHP 目录) - 打开该
php.ini,取消注释并设置:zlib.output_compression = On zlib.output_compression_level = 6 output_buffering = 4096
-
必须确保
zlib.output_handler保持注释状态(即以;开头),否则会与ob_gzhandler冲突,触发Warning: ob_start(): output handler 'ob_gzhandler' cannot be used after zlib.output_compression - 修改后重启的是 Web 服务进程:Apache 需
sudo systemctl restart apache2(Linux)或在 phpEnv 控制面板中「停止 Apache」→「启动 Apache」;Nginx + PHP-FPM 需sudo systemctl reload nginx且sudo systemctl restart php-fpm
避免在脚本里重复调用 ob_gzhandler
一旦 zlib.output_compression = On 生效,ob_start('ob_gzhandler') 就不能再用——它会直接报错并中断输出。
- 检查所有入口文件(如
index.php、public/index.php)顶部是否残留类似代码:ob_start('ob_gzhandler'); - ThinkPHP5 用户特别注意:
config/app.php中的'gzip' => true与zlib.output_compression = On同时启用会导致双重压缩或冲突,应只保留其一 - 若需动态控制(例如仅对 API 响应压缩),建议改用 Web 服务器层判断,而非 PHP 脚本内硬编码
Nginx 或 Apache 层压缩更高效(尤其搭配 PHP-FPM)
PHP 层压缩会占用 PHP 进程 CPU,而 Web 服务器层压缩在响应离开 PHP 后立即处理,更适合高并发场景,且能统一压缩静态资源和动态 PHP 输出。
- Nginx 用户:在
http块中添加(注意包含application/x-httpd-php):gzip on; gzip_min_length 1024; gzip_types text/plain text/css text/javascript application/javascript application/json application/xml application/xhtml+xml text/xml application/x-httpd-php;
- Apache 用户:确认
mod_deflate已启用(a2enmod deflate),并在.htaccess或虚拟主机配置中加入:<ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json application/x-httpd-php </ifmodule>
- 验证时务必刷新 Network 标签页并点击 HTML 请求项——只看
Response Headers中是否有Content-Encoding: gzip,不要只依赖页面体积估算
最容易被忽略的是:php.ini 修改后没真正重启 Web 服务进程(尤其是 phpEnv 用户常误点「重启 phpEnv 主程序」而非「重启 Apache」),或者用了错误的 php.ini 路径(phpinfo() 的 Loaded Configuration File 是唯一可信来源)。压缩生效与否,只取决于这一行头信息是否出现,其余都是干扰项。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











