php zlib decompress,PHP使用zlib实现页面的gzip压缩输出

php中的GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很快。

要实现GZIP压缩页面需要浏览器和

服务器共同支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心,因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

要压缩一个页面,首先要获得要输出的内容。PHP中的ob_start()(ob => output buffer)函数可以实现这个功能,它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方。这个函数一定要在页面输出之前使用,所以一般把它放在代码的最顶端。

方法一

用PHP内置方法

if(Extension_Loaded('zlib')) Ob_Start('ob_gzhandler');

Header("Content-type: text/html; charset=utf-8");

//准备一些待压缩的内容

for($i=0; $i

echo('测试: 需要压缩的内容');

}

if(Extension_Loaded('zlib')) Ob_End_Flush();

?>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

方法二

用自写方法实现gzip压缩

/**

* 压缩输出方法 gzip压缩函数

* @param $content mixed 要压缩的页面内容

*/

function ob_gzip($content)

{

if(!headers_sent() && // 如果页面头部信息还没有输出

extension_loaded("zlib") && // 而且zlib扩展已经加载到PHP中

strstr($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip")){ //而且浏览器说它可以接受GZIP的页面

//为准备压缩的内容贴上"此页已压缩"的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU.

$content = gzencode($content." 此页已压缩", 9);

//然后用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!

header("Content-Encoding: gzip");

header("Vary: Accept-Encoding");

header("Content-Length: ".strlen($content));

}

return $content; //返回压缩的内容

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

调用方法:

给ob_start

方法传入

ob_gzip

作为callback参数,这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了,然后用ob_end_flush()方法刷新缓冲区,输出内容

//启用一个带有ob_gzip压缩机的工作台

ob_start('ob_gzip');

//准备一些待压缩的内容

for($i=0; $i

echo('测试: 需要压缩的内容');

}

//输出压缩成果

ob_end_flush();

/**

* 压缩输出方法 gzip压缩函数

* @param $content mixed 要压缩的页面内容

*/

function ob_gzip($content)

{

if(!headers_sent() && // 如果页面头部信息还没有输出

extension_loaded("zlib") && // 而且zlib扩展已经加载到PHP中

strstr($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip")){ //而且浏览器说它可以接受GZIP的页面

//为准备压缩的内容贴上"此页已压缩"的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU.

$content = gzencode($content." 此页已压缩", 9);

//然后用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!

header("Content-Encoding: gzip");

header("Vary: Accept-Encoding");

header("Content-Length: ".strlen($content));

}

return $content; //返回压缩的内容

}

?>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

经过实际测试,用firebug可以看到

如果不启用GZIP需要传输2.8KB=2900B的数据

启用GZIP后缩小为83B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值