网站传输的内容体积直接影响带宽消耗和页面加载效率,启用PHP的Gzip压缩输出是优化这两类问题的常用方案。下面将详细介绍不同场景下开启该功能的具体操作。

一、通过修改PHP配置文件开启
这种方式适合有权限修改服务器PHP配置的场景,修改后对所有PHP页面生效。
步骤1:确认服务器是否支持zlib扩展
首先可以通过简单的代码检查服务器是否加载了zlib扩展,该扩展是Gzip压缩的基础依赖。
<?php
// 检查zlib扩展是否加载
if (extension_loaded('zlib')) {
echo 'zlib扩展已加载,支持Gzip压缩';
} else {
echo 'zlib扩展未加载,请先安装或启用该扩展';
}
?>步骤2:修改php.ini配置
找到服务器对应的php.ini配置文件,搜索以下配置项并修改对应的值:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| zlib.output_compression | On | 开启Gzip压缩输出功能 |
| zlib.output_compression_level | 4 | 压缩级别,范围1-9,数值越高压缩率越高,但CPU消耗越大,一般4-6比较均衡 |
修改完成后重启PHP服务(比如Apache、Nginx对应的PHP-FPM服务),配置即可生效。
二、在PHP代码中手动开启
如果没有权限修改php.ini配置,可以在PHP页面的头部手动调用相关函数开启Gzip压缩,注意这段代码要放在所有输出内容之前,不能有任何HTML、空格、换行在前面。
<?php
// 检查浏览器是否支持gzip压缩
if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
// 检查zlib扩展是否可用
if (extension_loaded('zlib')) {
// 开启缓冲区
ob_start();
// 注册压缩回调函数
ob_start('ob_gzhandler');
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Gzip压缩测试页面</title>
</head>
<body>
<p>这是一个启用Gzip压缩的页面示例</p>
</body>
</html>
<?php
// 页面输出完成后刷新缓冲区
if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
if (extension_loaded('zlib')) {
ob_end_flush();
}
}
?>三、效果验证与注意事项
验证压缩是否生效
可以通过浏览器的开发者工具查看网络请求的响应头,如果看到Content-Encoding: gzip的字段,说明Gzip压缩已经成功开启。也可以对比开启前后的响应体积,通常文本内容可以压缩到原来的30%-70%左右。
注意事项
- 已经压缩过的文件比如图片、PDF等,再次用Gzip压缩效果不明显,还浪费CPU资源,可以通过服务器配置排除这类文件的压缩。
- 压缩级别不要设置过高,避免占用过多服务器CPU资源,影响整体服务性能。
- 如果页面已经通过Nginx、Apache等Web服务器开启了Gzip压缩,就不需要再在PHP层面重复开启,避免冲突。
- 手动在代码中开启时,一定要确保所有输出之前没有多余的内容,否则可能导致
ob_gzhandler函数无法正常工作。
四、常见问题排查
如果开启后没有生效,可以先检查zlib扩展是否正常加载,再检查配置是否重启生效,或者代码中是否有提前输出的内容。如果是共享主机环境,可能需要联系服务商确认是否允许开启相关功能。