分类:
2008-04-12 21:00:08
http1.1支持gzip编码的数据,所以,通过GZIP来实现页面压缩。在PHP中,我所知道的有两种方法使用GZIP,一种是PHP自带的,不过,要你所用的服务器支持才行!还有一种,呵呵,从网上搜索来的,在这儿就献给大家了。
ob_start();//打开输出缓冲
ob_implicit_flush(0);//
//*****************************************************************//
//函数名:canGzip()
//作用:检查客户浏览器是否支持gzip,x-gzip编码
//参数:
//返回值:支持的编码类型"gzip", "x-gzip", 返回false代表不支持
//*****************************************************************//
function canGzip()
{
//if (headers_sent() || connection_status)
//return false;
if (strpos('King'.$_SERVER["HTTP_ACCEPT_ENCODING"], 'gzip') !== false)
return "gzip";
if (strpos('King'.$_SERVER["HTTP_ACCEPT_ENCODING"], 'x-gzip') !== false)
return "x-gzip";
return false;
}
//*****************************************************************//
//函数名:doGzipOut($level, $debug)
//作用:对输出缓冲的数据进行压缩并输出
//参数:$level代表压缩级别, 0 = 不压缩, 9 = 最大压缩率
// $debug代表是否输出调试信息, 1 = 输出, 0 = 不输出
//返回值:
//*****************************************************************//
function doGzipOut($level = 1, $debug = 0)
{
$ENCODING = canGzip();
if ($ENCODING)
{
echo "nn";
$contents = ob_get_contents();
ob_end_clean();
if ($debug)
{
$s = "
Not compress length: ".strlen($contents);
$s .= "
Compressed length: ".strlen(gzcompress($contents,$level));
$contents .= $s;
}
header("Content-Encoding: $ENCODING");
echo "x1fx8bx08x00x00x00x00x00"; //???
$size = strlen($contents);
$crc = crc32($contents);
$contents = gzcompress($contents, $level);
$contents = substr($contents, 0, strlen($contents) - 4); //???
echo $contents;
echo pack('V',$crc);
echo pack('V',$size);
exit;
}
else
{
ob_end_flush();
exit();
}
}
?>
使用方法: ------------Start of file----------
|< ?
| include('gzipOut.php');
|? >
|
|... the page ...
|
|< ?
| echo "............"
|
| doGzipout();
|? >
-------------End of file-----------