设为首页 收藏本站
查看: 841|回复: 0

[经验分享] PHP 中实现GZIP压缩页面输出实例

[复制链接]

尚未签到

发表于 2018-12-17 10:03:26 | 显示全部楼层 |阅读模式
  最新PHP 中实现GZIP压缩页面输出实例
  以下是三零网为大家整理的最新PHP 中实现GZIP压缩页面输出实例的文章,希望大家能够喜欢!
  GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快!
  要实现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(); //结束缓冲区,输出内容。当然,不用这个函数也行,因为程序执行到最后会自动将缓冲区内容输出。
  完整的示例如下:
  
  经过实际测试,上面代码中如果不用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
  转载来自:http://www.q3060.com/list3/list117/267.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652309-1-1.html 上篇帖子: lamp环境php测试页面打不开问题之一。。。 下篇帖子: PHP 图片上传生成缩略图代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表