具体效果你可以到这里看看http://www.php2000.com/~uchinaboy/out.php php2000的最新的php聊天室就是用的这个技术,可惜的是源代码未公开 l 注:如果在程序的首部加入ob_implicit_flush()打开绝对刷新,就可以在程序中不再使用flush(),这样做的好处是:提高效率!
<? /* ** title.........: php4 http compression speeds up the web ** version.......: 1.20 ** author........: catoc <[email protected]> ** filename......: gzdoc.php ** last changed..: 18/10/2000 ** requirments...: php4 >= 4.0.1 ** php was configured with --with-zlib[=dir] ** notes.........: dynamic content acceleration compresses ** the data transmission data on the fly ** code by sun jin hu (catoc) <[email protected]> ** most newer browsers since 1998/1999 have ** been equipped to support the http 1.1 ** standard known as "content-encoding." ** essentially the browser indicates to the ** server that it can accept "content encoding" ** and if the server is capable it will then ** compress the data and transmit it. the ** browser decompresses it and then renders ** the page. ** ** modified by john lim ([email protected]) ** based on ideas by sandy mcarthur, jr ** usage........: ** no space before the beginning of the first '<?' tag. ** ------------start of file---------- ** |<? ** | include('gzdoc.php'); ** |? > ** |<html> ** |... the page ... ** |</html> ** |<? ** | gzdocout(); ** |? > ** -------------end of file----------- */ ob_start(); ob_implicit_flush(0); function checkcangzip(){ global $http_accept_encoding; if (headers_sent() || connection_timeout() || connection_aborted()){ return 0; } if (strpos($http_accept_encoding, 'x-gzip') !== false) return "x-gzip"; if (strpos($http_accept_encoding,'gzip') !== false) return "gzip"; return 0; } /* $level = compression level 0-9, 0=none, 9=max */ function gzdocout($level=1,$debug=0){ $encoding = checkcangzip(); if ($encoding){ print "n<!-- use compress $encoding -->n"; $contents = ob_get_contents(); ob_end_clean(); if ($debug){ $s = "<p>not compress length: ".strlen($contents); $s .= " compressed length: ".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; print pack('v',$crc); print pack('v',$size); exit; }else{ ob_end_flush(); exit; } } ?> 这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……