本文目录导读:

在 PHP 中实现响应压缩,主要有两种方式:自动压缩(推荐) 和 手动压缩。
自动压缩(最简单推荐)
在 php.ini 或服务器配置中开启:
修改 php.ini
zlib.output_compression = On zlib.output_compression_level = 6
zlib.output_compression = On:启用输出压缩zlib.output_compression_level:压缩级别(1-9,6 是平衡值)
在 PHP 代码中动态设置
<?php
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', 6);
// 之后的输出会被自动压缩
优点:不用修改代码,自动处理所有输出
缺点:需要在服务器层面配置
手动压缩(更灵活)
使用 ob_gzhandler() 回调函数:
<?php
// 在输出任何内容之前设置
ob_start('ob_gzhandler');
// 所有输出都会自动压缩
echo "Hello, World!";
echo str_repeat("A", 10000); // 大内容也会被压缩
ob_end_flush();
工作原理:
ob_gzhandler会检查浏览器是否支持 gzip- 如果不支持,自动输出未压缩内容
- 支持则输出 gzip 压缩内容
完整示例(手动控制)
<?php
// 检查客户端是否支持 gzip
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip') !== false) {
ob_start('ob_gzhandler');
} else {
ob_start();
}
// 设置合适的 Content-Type
header('Content-Type: text/html; charset=utf-8');
echo "这是一个测试页面";
echo str_repeat("内容压缩测试 ", 500); // 生成大量重复内容
// 输出缓冲区内容并结束
ob_end_flush();
压缩大文件/响应
对于超大响应,建议分块压缩:
<?php
function compressOutput($content) {
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip') !== false) {
$compressed = gzencode($content, 6);
header('Content-Encoding: gzip');
header('Content-Length: ' . strlen($compressed));
return $compressed;
}
return $content;
}
$largeContent = str_repeat("Some long content ", 10000);
// 手动压缩并输出
echo compressOutput($largeContent);
验证是否生效
浏览器开发者工具
- 打开 Chrome/Firefox 开发者工具 → Network
- 查看请求的 Response Headers
- 如果看到:
Content-Encoding: gzip✅ 压缩生效- 没有这个 header ❌ 未压缩
用 curl 测试
curl -H "Accept-Encoding: gzip" -I https://your-site.com
查看返回的 headers 中是否有 Content-Encoding: gzip。
注意事项
| 场景 | 建议 |
|---|---|
| 共享主机 | 使用 ob_gzhandler(大多数主机支持) |
| 专用服务器 | 在 php.ini 或 Nginx/Apache 层面开启 |
| API 接口 | 手动检查 Accept-Encoding 再决定是否压缩 |
| 已压缩资源 | 图片、视频等不要再压缩(浪费时间) |
- 简单快速:在 php.ini 开启
zlib.output_compression = On - 灵活控制:用
ob_start('ob_gzhandler') - 强力推荐:直接在 Web 服务器层面(Nginx/Apache)开启 gzip,比 PHP 层面更高效
如果你用的是 Nginx,建议在 Nginx 配置中开启 gzip,性能最好:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
这样 PHP 代码完全不需要改,服务器自动压缩。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播