仓酷云

标题: PHP编程:谈PHP若何完成页面GZIP紧缩输入 [打印本页]

作者: 飘飘悠悠    时间: 2015-2-3 23:53
标题: PHP编程:谈PHP若何完成页面GZIP紧缩输入
第1步环境配置好了,你算了进了1小步了,那么第2步呢 就是调出第1个程序 一般都是用hello world,视频教程里面我都做了,hello world   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(); //停止缓冲区,输入内容。固然,不必这个函数也行,由于法式履行到最初会主动将缓冲区内容输入。
完全的示例以下:
代码:
<?php
//启用一个带有ob_gzip紧缩机的任务台
ob_start('ob_gzip');
//筹办一些待紧缩的内容
for(&#36;i=0; &#36;i<100; &#36;i++)
{
    echo('这里是紧缩饼干的原料,这里是紧缩饼干的原料,原料');
}
//输入紧缩功效
ob_end_flush();
//这是ob_gzip紧缩机
function ob_gzip(&#36;content)
{   
    if(    !headers_sent() &&
        extension_loaded("zlib") &&
        strstr(&#36;_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
    {
        &#36;content = gzencode(&#36;content." \n//此页已紧缩",9);
        
        header("Content-Encoding: gzip");
        header("Vary: Accept-Encoding");
        header("Content-Length: ".strlen(&#36;content));
    }
    return &#36;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

到现在,对排版还是不很熟练,经常会排不好。
作者: 乐观    时间: 2015-2-4 06:49
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 仓酷云    时间: 2015-2-5 14:43
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 蒙在股里    时间: 2015-2-12 06:54
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 海妖    时间: 2015-2-26 08:01
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 山那边是海    时间: 2015-3-6 10:58
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 再现理想    时间: 2015-3-13 00:07
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 爱飞    时间: 2015-3-20 06:23
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 简单生活    时间: 2015-3-31 23:21
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者: 老尸    时间: 2015-4-1 21:10
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 第二个灵魂    时间: 2015-4-9 19:06
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
作者: 飘飘悠悠    时间: 2015-4-16 03:10
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 灵魂腐蚀    时间: 2015-4-16 19:09
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
作者: 飘灵儿    时间: 2015-4-24 06:06
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 不帅    时间: 2015-5-4 14:46
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 再见西城    时间: 2015-5-6 08:12
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 莫相离    时间: 2015-6-29 05:25
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
作者: 变相怪杰    时间: 2015-7-20 00:41
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 冷月葬花魂    时间: 2015-7-21 13:46
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 只想知道    时间: 2015-7-23 00:06
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 精灵巫婆    时间: 2015-7-24 09:57
基础有没有对学习php没有太大区别,关键是兴趣。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2