不支持。PHP本地环境默认不启用Gzip压缩,需依赖Web服务器(如Apache/Nginx)或手动配置zlib扩展与输出控制,且PHP内置服务器完全不支持。

PHP本地环境是否默认支持Gzip压缩?
不支持。PHP本身不直接处理HTTP响应的Gzip压缩,它依赖Web服务器(如Apache、Nginx)或PHP内置的zlib扩展配合输出控制来实现。本地开发环境(如XAMPP、WAMP、MAMP、Docker或PHP内置服务器)默认通常关闭Gzip,即使zlib已启用,也需显式配置才能生效。
检查zlib扩展是否已启用
这是前提条件。没有启用zlib,后续所有Gzip设置都会无效。
- 运行
php -m | grep zlib(命令行)或创建phpinfo()页面查看是否有zlib模块 - 若未启用,在
php.ini中取消注释:extension=zlib(Windows)或extension=php_zlib.dll(旧版),Linux/macOS 通常是extension=zlib.so - 修改后必须重启Web服务(不是仅重启PHP-FPM)
- 验证:执行
var_dump(function_exists('gzencode'));应返回bool(true)
Apache(XAMPP/WAMP)开启Gzip的正确方式
不能只靠php.ini里的zlib.output_compression——它仅对PHP输出生效,且可能与Apache的mod_deflate冲突。推荐用Apache原生压缩:
- 确保
mod_deflate已加载:在httpd.conf中确认有LoadModule deflate_module modules/mod_deflate.so - 在
.htaccess或虚拟主机配置中添加:
AddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript application/javascript application/x-javascript application/json SetOutputFilter DEFLATE
注意:SetOutputFilter DEFLATE对PHP脚本生成的HTML/CSS/JS才有效;静态文件由AddOutputFilterByType处理。避免同时开启zlib.output_compression = On,否则可能双重压缩或报错Content-Encoding header changed。
立即学习“PHP免费学习笔记(深入)”;
PHP内置服务器(php -S)无法原生支持Gzip
PHP自带的php -S localhost:8000不支持任何HTTP压缩,zlib.output_compression在此模式下被忽略(PHP文档明确说明)。若你用的是这个方式启动本地服务:
- 必须换用Apache/Nginx,或
- 手动在PHP代码中调用
ob_start('ob_gzhandler')(仅适用于纯PHP输出,不压缩CSS/JS等静态资源) - 示例(放在入口脚本最顶部):
但要注意:一旦用了
ob_start('ob_gzhandler'),就不能再用header()发送非UTF-8编码头(如Content-Type: text/html; charset=gbk),否则会触发Cannot modify header information警告。最容易被忽略的一点:浏览器开发者工具的Network面板里,
Content-Encoding: gzip只出现在响应头中,且前提是服务器实际完成了压缩并设置了该头——别只看Transfer-Encoding: chunked或体积变小就误判成功。











