php gzip压缩输出的实现方法(3)

另外,从Apache 2.0.45开始,mod_deflate 可使用DeflateCompressionLevel 指令来设置压缩级别。该指令的值可为1(压缩速度最快,最低的压缩质量)至9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质 量较为平衡的值)。这个简单的变化更是使得mod_deflate 可以轻松媲美mod_gzip 的压缩。

P.S. 对于没有启用以上两种Gzip模块的虚拟空间,还可以退而求其次使用php的zlib函数库(同样需要查看服务器是否支持)来压缩文件,只是这种方法使用起来比较麻烦,而且一般会比较耗费服务器资源,请根据情况慎重使用。

五、zlib.output_compression和ob_gzhandler编码方式压缩

服务器不支持mod_gzip、mod_deflate模块,若想通过GZIP压缩网页内容,可以考虑两种方式,开启zlib.output_compression或者通过ob_gzhandler编码的方式

1)zlib.output_compression是在对网页内容压缩的同时发送数据至客户端。

2)ob_gzhandler是等待网页内容压缩完毕后才进行发送,相比之下前者效率更高,但需要注意的是,两者不能同时使用,只能选其一,否则将出现错误。

两者的实现方式做简单描述:

    1. zlib.output_compression实现方式

在默认情况下,zlib.output_compression是关闭:

复制代码 代码如下:


    ; Transparent output compression using the zlib library 
    ; Valid values for this option are 'off', 'on', or a specific buffer size 
    ; to be used for compression (default is 4KB) 
    ; Note: Resulting chunk size may vary due to nature of compression. PHP 
    ;   outputs chunks that are few hundreds bytes each as a result of 
    ;   compression. If you prefer a larger chunk size for better 
    ;   performance, enable output_buffering in addition. 
    ; Note: You need to use zlib.output_handler instead of the standard 
    ;   output_handler, or otherwise the output will be corrupted. 
    ;  
    zlib.output_compression = Off 

    ;  
    ;zlib.output_compression_level = -1 


        如需开启需编辑php.ini文件,加入以下内容:

复制代码 代码如下:


    zlib.output_compression = On 
    zlib.output_compression_level = 6 


       可以通过phpinfo()函数检测结果。

当zlib.output_compression的Local Value和MasterValue的值同为On时,表示已经生效,这时候访问的PHP页面(包括伪静态页面)已经GZIP压缩了,通过Firebug或者在线网页GZIP压缩检测工具可检测到压缩的效果。
2. ob_gzhandler的实现方式

如果需要使用ob_gzhandler,则需关闭zlib.output_compression,把php.ini文件内容更改为:
    zlib.output_compression = Off 
    zlib.output_compression_level = -1 
通过在PHP文件中插入相关代码实现GZIP压缩P压缩:

复制代码 代码如下:


    if (extension_loaded('zlib')) { 
        if (  !headers_sent() AND isset($_SERVER['HTTP_ACCEPT_ENCODING']) && 
              strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) 
        //页面没有输出且浏览器可以接受GZIP的页面 
        { 
            ob_start('ob_gzhandler'); 
        } 
    } 
    //待压缩的内容 
    echo $context; 
    ob_end_flush(); 


       不管是zlib.output_compression还是ob_gzhandler,都仅能对PHP文件进行GZIP压缩,对于HTML、CSS、JS等静态文件只能通过调用PHP的方式实现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/adc2994ca1ebc777ae71ab4fdda4a7c5.html