网页压缩输出
[08-23 22:09:48] 来源:http://www.duoxue8.com PHP教程 阅读:905次<?
//gzdoc.php
ob_start();
ob_implicit_flush(0);
function GzDocOut(){
$gziplevel=9;
$ENCODING = "gzip";
$Contents = ob_get_contents();
$Contents .= "n<!-- Use compress $ENCODING -->n";
ob_end_clean();
header("Content-Encoding: $ENCODING");
print pack('cccccccc',0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00);
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$gziplevel);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack('V',$Crc);
print pack('V',$Size);
exit;
}
?>
<?php
//test.php
include_once("./gzdoc.php");
echo "test";
GzDocOut();
?>
还有一个函数形式的。
function gzipOutput($text,$level=1){
$returntext=$text;
$encoding = false;
if (function_exists("crc32") and function_exists("gzcompress") ){
if (strpos(" ".$_SERVER['HTTP_ACCEPT_ENCODING'],"x-gzip")) {
$encoding = "x-gzip";
}
if (strpos(" ".$_SERVER['HTTP_ACCEPT_ENCODING'],"gzip")) {
$encoding = "gzip";
}
if ($encoding) {
header("Content-Encoding: $encoding");
$size = strlen($text);
$crc = crc32($text);
$returntext = "x1fx8bx08x00x00x00x00x00";
$returntext .= substr(gzcompress($text,$level),0,-4);
$returntext .= pack("V",$crc);
$returntext .= pack("V",$size);
}
}
return $returntext;
}
转贴一篇文章:
在开始之前,要保证你的 PHP4 编译时支持 Zlib。
首先,初始化输出缓冲:
<?php
ob_start();
ob_implicit_flush(0);
?>
然后产生所有的输出内容。
<?php
print("本例为压缩输出!");
?>
页面生成以后,采用:
<?php
$contents = ob_get_contents();
ob_end_clean();
?>
还要检查浏览器是否支持压缩数据,我们采用在变量 $HTTP_ACCEPT_ENCODING 中检查 "gzip, deflate"的办法:
<?php
if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
// 产生 gzip 后的内容
} else {
echo $contents;
}
?>
下面我们分析怎样产生 gzip 输出:
<?php
// 告诉浏览器下面接收的是 gzip 数据。
header("Content-Encoding: gzip");
// 显示 gzip 文件的文件头
// 只要一次就够了
echo "x1fx8bx08x00x00x00x00x00";
// 计算长度和 CRC 校验码
$Size = strlen($contents);
$Crc = crc32($contents);
// 压缩数据
$contents = gzcompress($contents, 9);
// 不能直接在这里输出内容,因为还没有写入 CRC 呢!
$contents = substr($contents, 0, strlen($contents) - 4);
echo $contents;
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);
function gzip_PrintFourChars($Val) {
for ($i = 0; $i < 4; $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
?>
---------------------------------------------------------------
<?php
phpinfo();
?>
里面看HTTP_ACCEPT_ENCODING gzip, deflate 这样估计就可以了。具体不清楚。
网页压缩输出 结束。