所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:“Header had all ready send by”!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
搞代gaodaima码………: PHP4 HTTP Compression Speeds up the Web ** Version…….: 1.20 ** Author……..: catoc ** 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) ** 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’); ** |? > ** | ** |… the page … ** | ** |<? ** | 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 “nn”; $Contents = ob_get_contents(); ob_end_clean(); if ($debug) { $s = “