首页 php教程 php手册 PHP zlib扩展实现页面GZIP压缩输出

PHP zlib扩展实现页面GZIP压缩输出

Jun 13, 2016 pm 12:15 PM
gzip php zlib 共同 压缩 实现 扩展 服务器 浏览器 输出 需要 页面

要实现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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++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教程
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
2025最安全交易所TOP5:黑U避坑指南,资金100%保命法则 2025最安全交易所TOP5:黑U避坑指南,资金100%保命法则 May 08, 2025 pm 08:27 PM

在加密货币交易领域,交易所的安全性始终是用户关注的重点。2025年,经过多年的发展和演变,一些交易所凭借其卓越的安全措施和用户体验脱颖而出。本文将详细介绍2025年最安全的五大交易所,并提供如何避开黑U(黑客攻击用户)的实用指南,确保您的资金100%安全。

ok交易所国内如何注册?ok交易平台大陆新手注册使用指南 ok交易所国内如何注册?ok交易平台大陆新手注册使用指南 May 08, 2025 pm 10:51 PM

在加密货币市场中,选择一个可靠的交易平台是至关重要的。OK交易平台作为全球知名的数字资产交易所,吸引了大量大陆新手用户。本指南将详细介绍如何在OK交易平台上进行注册和使用,帮助新手用户快速上手。

PHP性能优化清单:立即提高速度 PHP性能优化清单:立即提高速度 May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

币安Binance交易所安装、注册详细指南(2025最新步骤) 币安Binance交易所安装、注册详细指南(2025最新步骤) May 08, 2025 pm 11:06 PM

币安(Binance)是全球领先的加密货币交易平台之一,提供多种数字资产的交易服务。如果你正在考虑使用币安进行加密货币交易,本文将为你提供详细的安装和注册指南。

PHP性能优化策略。 PHP性能优化策略。 May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

okx交易所入口 okx交易平台官网登录入口 okx交易所入口 okx交易平台官网登录入口 May 08, 2025 pm 11:15 PM

OKX 作为全球领先的加密货币交易平台,为用户提供了多样化的交易服务和安全的交易环境。自成立以来,OKX 凭借其强大的技术支持和丰富的交易产品,吸引了大量的用户和投资者。无论你是新手还是专业交易者,OKX 都能满足你的交易需求。

GO:使用标准'字符串”包的字符串操纵 GO:使用标准'字符串”包的字符串操纵 May 09, 2025 am 12:07 AM

Go语言使用"strings"包进行字符串操作。1)拼接字符串使用strings.Join函数。2)查找子串使用strings.Contains函数。3)替换字符串使用strings.Replace函数,这些函数高效且易用,适用于各种字符串处理任务。

PHP电子邮件:分步发送指南 PHP电子邮件:分步发送指南 May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

See all articles