操作方法:

对于PHP文件传输中压缩,只需在原来的 PHP 文件首行加上

<?php if(extension_loaded(‘zlib‘)){ob_start(‘ob_gzhandler‘);} ?>

并且在结尾加上

<?php if(extension_loaded(‘zlib‘)){ob_end_flush();} ?>

复制时还原为正规的PHP格式。


对于js文件,则在原来js文件的首行加上

<?php if(extension_loaded(‘zlib‘)){ob_start(‘ob_gzhandler‘);}header(“Content-Type: text/javascript“);?>

末尾同样加上

<?php if(extension_loaded(‘zlib‘)){ob_end_flush();} ?>

然后存为abc.js.PHP这样的文件,并且修改指向这个所有html,PHP等文件。

<script type=“text/javascript“ src=“abc.js“ charset=“utf-8“></script>

<script type=“text/javascript“ src=“abc.js.php“ charset=“utf-8“></script>

对于a.html文件就直接改成a.PHP访问好了,如果要保留原来的URL就 修改.htaccess 伪URL或者建立一个网页跳转吧,而其他的CSS等文本也就依此推算出该怎么改了。

压缩效能说明:jQuery库源代码为50k左右,先写代码时优化,去除空格组合函数等使其减小至26k,再使用GZIP压缩至14k!

自定义ob_gzhandler:

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_gzhandler存在问题:

如果使用ob_start("ob_gzhandler");

则ob_clean()后面的输出将不显示,这是个bug,

可以用ob_end_clean();ob_start("ob_gzhandler"); 代替ob_clean();

否则后面输出内容将是空。

<?php

error_reporting(E_ALL);

ob_start("ob_gzhandler");

echo "content";

ob_clean();

echo "more content";

?>

上面的代码期望输出more content实际上什么内容也不会输出。

最稳定的启用页面压缩的方法:

<?php

if(extension_loaded('zlib')) {

ini_set('zlib.output_compression', 'On');

ini_set('zlib.output_compression_level', '3');

}

?>

参考文章:

压缩你的PHP、JS、CSS等文本类型代码

压缩你的网页输出ob_start('ob_gzhandler')

php关于ob_start('ob_gzhandler')启用GZIP压缩的bug