zlib.output_compression比ob_gzhandler效率高

zlib.output_compression和ob_gzhandler是php代码压缩的方法,通过使用这两个方法,可以实现php代码的gzip压缩。不过,这两个方法哪个更好呢?哪个效率更高呢?在编程中我们应该怎样选择?这都是程序员应该考虑的问题。

zlib.output_compression比ob_gzhandler效率高

其实,虽然zlib.output_compression和ob_gzhandler都可以进行php代码压缩,但它们的处理方式是不同的。

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

2)ob_gzhandler是等待网页内容压缩完毕后才进行发送

相比之下,zlib.output_compression效率更高。

需要注意的是,两者不能同时使用,只能选其一,否则将出现错误。

两者的实现方式分别如下:

1. zlib.output_compression实现方式

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

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压缩:

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的方式实现。

知识扩展

ob_gzhandler

ob_gzhandler (PHP 4 >= 4.0.4, PHP 5)

ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer

说明

string ob_gzhandler ( string $buffer , int $mode )

ob_gzhandler()目的是用在ob_start()中作回调函数,以方便将gz 编码的数据发送到支持压缩页面的浏览器。在ob_gzhandler()真正发送压缩过的数据之前,该 函数会确定(判定)浏览器可以接受哪种类型内容编码(”gzip”,”deflate”,或者根本什么都不支持),然后 返回相应的输出。 所有可以发送正确头信息表明他自己可以接受压缩的网页的浏览器,都可以支持。 All browsers are supported since it’s up to the browser to send the correct header saying that it accepts compressed web pages. 如果一个浏览器不支持压缩过的页面,此函数返回FALSE。

参数

buffer

mode

返回值

更新日志

版本 4.0.5
说明 添加了 mode 参数。 

范例

Example #1 ob_gzhandler() example
<?php
ob_start(“ob_gzhandler”);
?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>

注释

Note: ob_gzhandler() 需要 zlib 扩展。
Note: 不能同时使用ob_gzhandler() 和 zlib.output_compression。 也要注意使用 zlib.output_compression 要优于 ob_gzhandler()。

您可能对如下文章也感兴趣

php通过ini_set调用output_compression压缩网页