php压缩技术

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($i=0; $i<100; $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 ,呃……我数学可能不好,自己算下压缩到了原来的百分之多少吧。。

时间: 2024-09-30 10:17:33

php压缩技术的相关文章

oracle表压缩技术

  oracle压缩技术分为基本表压缩(basic table compression),OLTP表压缩(OLTP table compression),索引压缩(index compression)和混合列压缩(hybrid columnar compression (HCC)). basic compression从9i开始推出,是oracle的默认压缩方式.OLTP compression是11g开始推出,支持所有类型的DML操作的数据压缩.压缩会节省磁盘空间,但可能会增加CPU资源的消耗

谷歌推全新压缩技术:画质提升 体积仅1/4

Engadget等媒体报道,为了节省宝贵的移动数据,谷歌开发了一种名为"RASIR"的新技术,能够提升图片质量,而不占用更多带宽. RASIR的全称为"快速且精准的超级图像分辨率"(Rapid and Accurate Super Image Resolution). 谷歌推出新压缩技术RASIR 提升图片品质且省带宽 截图 雷锋网获悉,RASIR可以快速大量读取和管理照片,而且只需要原来图像的四分之一大小的像素.RASIR通过分析两个相同的图像以及高低品质来实现这

压缩技术给SQL Server备份文件瘦身_MsSql

可是,其体积仍然很庞大.所以,在日常工作中,如何给SQL Server的备份文件瘦身,就是很多数据库管理员所关心的问题了. 也许微软的数据库产品设计专家听到了众多数据库管理员的呼声了吧.在最新的2008版本的SQLServer数据库中,提出了备份压缩的概念.其基本原理跟利用RAR等压缩工具压缩文件一样,可以让原有的备份文件体积更小.这直接带来的好处,就是可以节省服务器的备份空间.另外,若SQLServer数据库配置了异地备份的话,那么也可以节省网络带宽,缩短异地备份的时间,等等. 笔者前不久刚把

压缩技术给SQL Server备份文件瘦身

可是,其体积仍然很庞大.所以,在日常工作中,如何给SQL Server的备份文件瘦身,就是很多数据库管理员所关心的问题了. 也许微软的数据库产品设计专家听到了众多数据库管理员的呼声了吧.在最新的2008版本的SQLServer数据库中,提出了备份压缩的概念.其基本原理跟利用RAR等压缩工具压缩文件一样,可以让原有的备份文件体积更小.这直接带来的好处,就是可以节省服务器的备份空间.另外,若SQLServer数据库配置了异地备份的话,那么也可以节省网络带宽,缩短异地备份的时间,等等. 笔者前不久刚把

图数据表示与压缩技术综述

图数据表示与压缩技术综述 张宇 刘燕兵 熊刚 贾焰 刘萍 郭莉 对包含亿万个节点和边的图数据进行高效.紧凑的表示和压缩,是大规模图数据分析处理的基础.图数据压缩技术可以有效地降低图数据的存储空间,同时支持在压缩形式的图数据上进行快速访问.通过深入分析该技术的发展现状,将该技术分为基于传统存储结构的压缩技术.网页图压缩技术.社交网络图压缩技术.面向特定查询的图压缩技术4类.分别对每类技术详细分析了其代表方法并比较了它们之间的性能差异.最后对该技术进行了总结和展望. 图数据表示与压缩技术综述

基于Asp.Net MVC4 Bundle捆绑压缩技术的介绍_实用技巧

很高兴,最近项目用到了Asp.Net MVC4 + Entity Framework5,发现mvc4加入了Bundle.Web API等技术,着实让我兴奋,以前是用第三方的,这里主要说说Bundle技术. 很多大网站都没有用Bundle技术造成很多资源浪费与性能的牺牲,别小瞧 用上了你会发现他的好处: 将多个请求捆绑为一个请求,减少服务器请求数  没有使用Bundle技术,debug下看到的是实际的请求数与路径   使用Bundle技术,并且拥有缓存功能调试设置为Release模式并按F5或修改

Win2003+IIS 6.0下启用压缩技术精简网站体积的方法_win服务器

一.HTTP压缩概述 HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法.HTTP压缩采用通用的压缩算法如gzip等压缩HTML.JavaScript或 CSS文件.压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度.当然,同时也会增加一点点服务器的负担.Gzip是比较常见的 一种HTTP压缩算法. 二.HTTP压缩工作原理 Web服务器处理HTTP压缩的工作原理如下: 1.Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩: 在用户浏览器发

语音压缩及IP网上话音(VoIP)技术

在利用IP网络或租用专线实现语音交换机的全透明组网方案中,除了采用最先进的信令系统外,在交换系统中集成内置的语音压缩平台及其IP网上话音. VoIP技术和网关技术是实现高质量语音通信的关键所在.内置语音压缩技术为节点间的相互连接提供了一套新的解决方案,并且可以减少企业专网的通信费用.语音压缩方案可以在不改变现有的网络构造条件下,增加交换节点间的话务通过能力. 语音压缩能用于租用线就象语音和数据多路复用器.通过一条64kbit/s租用线连接两个语音交换节点,64kbit/s带宽其间可传输多个语

新一代静态影像压缩标准-JPEG2000

标准|静态|压缩 摘要: 为因应下一世纪多媒体影像之应用,我们要能提供更高压缩效能及更多功能之影像压缩技术.为了实践这个梦想,新一代之静态影像压缩标准,JPEG 2000,已开始着手制定.本篇主要介绍 JPEG 2000 之制定现况,原理及应用. JPEG(发音: jay peg),全名为 Joint Photographic Experts Group, 它是在国际标准组织(ISO)下从事静态影像压缩标准制定的委员会.它制定出了第一套国际静态影像压缩标准,ISO 10918-1,俗称 JPEG