Example6.加快传输
-----------------------------------------------------------------------------------------------------------
<?
/*
**Title.........:
PHP4HTTPCompressionSpeedsuptheWeb
**Version.......:1.20
**Author........:catoc<[email]catoc@163.net[/email]>
**Filename......:gzdoc.php
**Lastchanged..:18/10/2000
**Requirments...:
PHP4>=4.0.1
**PHPwasconfiguredwith--with-zlib[=DIR]
**Notes.........:DynamicContentAccelerationcompresses
**thedatatransmissiondataonthefly
**codebysunjinhu(catoc)<[email]catoc@163.net[/email]>
**Mostnewerbrowserssince1998/1999have
**beenequippedtosupporttheHTTP1.1
**standardknownas"content-encoding."
**Essentiallythebrowserindicatestothe
**serverthatitcanaccept"contentencoding"
**andiftheserveriscapableitwillthen
**compressthedataandtransmitit.The
**browserdecompressesitandthenrenders
**thepage.
**
**ModifiedbyJohnLim([email]jlim@natsoft.com.my[/email])
**basedonideasbySandyMcArthur,Jr
**Usage........:
**Nospacebeforethebeginningofthefirst'<?'tag.
**------------Startoffile----------
**|<?
**|include('gzdoc.php');
**|?>
**|<HTML>
**|...thepage...
**|</HTML>
**|<?
**|gzdocout();
**|?>
**-------------Endoffile-----------
*/
ob_start();
ob_implicit_flush(0);
functionCheckCanGzip(){
global$HTTP_ACCEPT_ENCODING;
if(headers_sent()||connection_timeout()||connection_aborted()){
return0;
}
if(strpos($HTTP_ACCEPT_ENCODING,'x-gzip')!==false)return"x-gzip";
if(strpos($HTTP_ACCEPT_ENCODING,'gzip')!==false)return"gzip";
return0;
}
/*$level=compressionlevel0-9,0=none,9=max*/
functionGzDocOut($level=1,$debug=0){
$ENCODING=CheckCanGzip();
if($ENCODING){
print"n<!--Usecompress$ENCODING-->n";
$Contents=ob_get_contents();
ob_end_clean();
if($debug){
$s="<p>Notcompresslength:".strlen($Contents);
$s.="
Compressedlength:".strlen(gzcompress($Contents,$level));
$Contents.=$s;
}
header("Content-Encoding:$ENCODING");
print"x1fx8bx08x00x00x00x00x00";
$Size=strlen($Contents);
$Crc=crc32($Contents);
$Contents=gzcompress($Contents,$level);
$Contents=substr($Contents,0,strlen($Contents)-4);
print$Contents;
printpack('V',$Crc);
printpack('V',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
-----------------------------------------------------------------------------------------------------------
这是catoc的一段很早以前的代码
,是在weblogs.com看到的
,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……