首页 后端开发 php教程 PHP开启gzip页面压缩实例代码_PHP教程

PHP开启gzip页面压缩实例代码_PHP教程

Jul 21, 2016 pm 03:40 PM
gzip php 代码 共同 压缩 实例 实现 开启 支持 服务器 浏览器 需要 页面

要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心,因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。
有点罗嗦,下面说正事:
正如要制作压缩饼干,先要拿到原料,要压缩一个页面,首先要获得要输出的内容。PHP中的ob_start()(ob => output buffer)函数可以实现这个功能,它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方,当然,你可以理解为制作压缩饼干的暂时放原料的工作台。
这个函数一定要在页面输出之前使用,所以一般把它放在代码的最顶端。因为它就像是一个工作台,所以你要在原料到来之前就要准备好它,否则原料来了没地方放,会出问题的。用ob_start()得到要压缩的页面之后,我们就可以制作压缩饼干了,不对,应该是可以压缩页面了!不过好像还缺少一台压缩机, EZ,我们用PHP带的zlib扩展做一台:

复制代码 代码如下:

function ob_gzip($content) // $content 就是要压缩的页面内容,或者说饼干原料
{
if( !headers_sent() && // 如果页面头部信息还没有输出
extension_loaded("zlib") && // 而且zlib扩展已经加载到PHP中
strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")) //而且浏览器说它可以接受GZIP的页面
{
$content = gzencode($content." \n//此页已压缩",9); 为准备压缩的内容贴上“//此页已压缩”的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU。
//然后用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content; //返回压缩的内容,或者说把压缩好的饼干送回工作台。
}

压缩机做好了之后,我们把压缩机放到工作台上,于是原来的ob_start()变成
ob_start('ob_gzip'); //没错,就是给ob_start()加一个参数,参数名就是我们刚才做的“压缩机”的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。
好了,所有的工作已完成,最后交货:
ob_end_flush(); //结束缓冲区,输出内容。当然,不用这个函数也行,因为程序执行到最后会自动将缓冲区内容输出。
完整的示例如下:
复制代码 代码如下:

//启用一个带有ob_gzip压缩机的工作台
ob_start('ob_gzip');
//准备一些待压缩的内容
for($i=0; $i{
echo('这里是压缩饼干的原料,这里是压缩饼干的原料,原料');
}
//输出压缩成果
ob_end_flush();
//这是ob_gzip压缩机
function ob_gzip($content)
{
if( !headers_sent() &&
extension_loaded("zlib") &&
strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
{
$content = gzencode($content." \n//此页已压缩",9);
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content;
}
?>

经过实际测试,上面代码中如果不用GZIP,是4.69KB=4802.56B,启用GZIP后缩小为104B ,呃……我数学可能不好,自己算下压缩到了原来的百分之多少吧。。
另外,下面是用FlashGet获取的日志信息,可以看到我们程序里加的header信息:
复制代码 代码如下:

Fri Jan 25 17:53:10 2008 HTTP/1.1 200 OK
Fri Jan 25 17:53:10 2008 Server: Microsoft-IIS/5.1
Fri Jan 25 17:53:10 2008 Date: Fri, 25 Jan 2008 09:53:10 GMT
Fri Jan 25 17:53:10 2008 Connection: close
Fri Jan 25 17:53:10 2008 X-Powered-By: PHP/5.2.5
Fri Jan 25 17:53:10 2008 Content-Encoding: gzip
Fri Jan 25 17:53:10 2008 Vary: Accept-Encoding
Fri Jan 25 17:53:10 2008 Content-Length: 104
Fri Jan 25 17:53:10 2008 Content-type: text/html

示例一(用php的内置压缩函数):
复制代码 代码如下:

if(Extension_Loaded('zlib')) Ob_Start('ob_gzhandler');
Header("Content-type: text/html");
?>




本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24
IIS和PHP的兼容性:深度潜水 IIS和PHP的兼容性:深度潜水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

欧易交易所如何注册账户 欧易交易所注册教程 欧易交易所如何注册账户 欧易交易所注册教程 Apr 24, 2025 pm 02:06 PM

注册欧易账户的步骤如下:1.准备有效邮箱或手机号和稳定网络。2.访问欧易官网。3.进入注册页面。4.选择邮箱或手机号注册,填写信息。5.获取并填写验证码。6.同意用户协议。7.完成注册并登录,进行KYC和设置安全措施。

币安下载链接 币安下载路径 币安下载链接 币安下载路径 Apr 24, 2025 pm 02:12 PM

安全下载币安APP需通过官方渠道:1. 访问币安官网,2. 找到并点击APP下载入口,3. 选择扫描二维码、应用商店或直接下载APK文件的方式下载,确保链接和开发者信息真实,开启双重验证保护账户安全。

欧易交易所app官网下载苹果手机下载 欧易交易所app官网下载苹果手机下载 Apr 28, 2025 pm 06:57 PM

欧易交易所app支持苹果手机下载,访问官网,点击“苹果手机”选项,在App Store中获取并安装,注册或登录后即可进行加密货币交易。

USDT转账地址错误怎么办 新手小白指南 USDT转账地址错误怎么办 新手小白指南 Apr 21, 2025 pm 12:12 PM

USDT转账地址错误后,首先确认转账已发生,然后根据错误类型采取措施。1.确认转账:查看交易记录,获取并在区块链浏览器上查询交易哈希值。2.采取措施:若地址不存在,等待资金退回或联系客服;若为无效地址,联系客服并寻求专业帮助;若转给了他人,尝试联系收款方或寻求法律帮助。

芝麻开门交易所如何注册账户 芝麻开门交易所注册教程 芝麻开门交易所如何注册账户 芝麻开门交易所注册教程 Apr 24, 2025 pm 02:00 PM

注册芝麻开门账号需7步:1.准备有效邮箱或手机号及稳定网络;2.访问官网;3.进入注册页面;4.选择并填写注册方式;5.获取并填写验证码;6.同意用户协议;7.完成注册并登录,建议进行KYC和设置安全措施。

两个交易所之间可以互相转币吗 交易所之间可以转币吗 两个交易所之间可以互相转币吗 交易所之间可以转币吗 Apr 22, 2025 am 08:57 AM

可以。两个交易所之间可以互相转币,只要支持相同的币种和网络。步骤包括:1. 获取收款地址,2. 发起提币请求,3. 等待确认。注意事项:1. 选择正确的转账网络,2. 仔细核对地址,3. 了解手续费,4. 注意到账时间,5. 确认交易所支持该币种,6. 注意最小提币数量。

什么是链上交易?全球链上交易所有哪些? 什么是链上交易?全球链上交易所有哪些? Apr 22, 2025 am 10:06 AM

欧盟MiCA合规认证,覆盖50 法币通道,冷存储比例95%,零安全事件记录。美国SEC持牌平台,法币直购便捷,冷存储比例98%,机构级流动性,支持大额OTC和自定义订单,多级清算保护。

See all articles