PHPʵÏÖÒ³ÃæGZIPѹËõÊä³ö

ʱ¼ä:2008-03-20 13:03:09  À´Ô´:À¶É«ÀíÏë  ×÷Õß:Fanbin  ¡¾±³¾°É« ÐÓÈÊ»Æ ÇïÒ¶ºÖ ëÙÖ¬ºì ½æÄ©ÂÌ ÌìÀ¶ Ñ©Çà »Ò ÒøºÓ°× ¡¿

GZIP£¨GNU-ZIP£©ÊÇÒ»ÖÖѹËõ¼¼Êõ¡£¾­¹ýGZIPѹËõºóÒ³Ãæ´óС¿ÉÒÔ±äΪԭÀ´µÄ30%ÉõÖÁ¸üС¡£ÕâÑùÓû§ä¯ÀÀµÄʱºò¾Í»á¸Ð¾õºÜˬºÜÓä¿ì£¡
ҪʵÏÖGZIPѹËõÒ³ÃæÐèÒªä¯ÀÀÆ÷ºÍ·þÎñÆ÷¹²Í¬Ö§³Ö£¬Êµ¼ÊÉϾÍÊÇ·þÎñÆ÷ѹËõ£¬´«µ½ä¯ÀÀÆ÷ºóä¯ÀÀÆ÷½âѹ²¢½âÎö¡£ä¯ÀÀÆ÷ÄDZ߲»ÐèÒªÎÒÃǵ£ÐÄ£¬ÒòΪÏÖÔÚ¾ø´ó¶àÊýä¯ÀÀÆ÷¶¼Ö§³Ö½âÎöGZIP¹ýµÄÒ³Ãæ¡£ÎÒÃÇÖ»Òª°ÑÒ³ÃæÔÚ·þÎñÆ÷¶ËѹËõÔÙÊä³öµ½ä¯ÀÀÆ÷¾ÍÐÐÁË¡£

ÓеãÂÞ࣬ÏÂÃæËµÕýÊ£º

ÕýÈçÒªÖÆ×÷ѹËõ±ý¸É£¬ÏÈÒªÄõ½Ô­ÁÏ£¬ÒªÑ¹ËõÒ»¸öÒ³Ãæ£¬Ê×ÏÈÒª»ñµÃÒªÊä³öµÄÄÚÈÝ¡£PHPÖеÄob_start()£¨ob => output buffer£©º¯Êý¿ÉÒÔʵÏÖÕâ¸ö¹¦ÄÜ£¬Ëü¿ÉÒ԰ѳÌÐòÀï×¼±¸Êä³öµÄÄÚÈÝÏȷŵ½Ò»¸ö½Ð×ö“»º³åÇø”µÄµØ·½£¬µ±È»£¬Äã¿ÉÒÔÀí½âÎªÖÆ×÷ѹËõ±ý¸ÉµÄÔÝʱ·ÅÔ­ÁϵŤ×÷̨¡£
Õâ¸öº¯ÊýÒ»¶¨ÒªÔÚÒ³ÃæÊä³ö֮ǰʹÓã¬ËùÒÔÒ»°ã°ÑËü·ÅÔÚ´úÂëµÄ×î¶¥¶Ë¡£ÒòΪËü¾ÍÏñÊÇÒ»¸ö¹¤×÷̨£¬ËùÒÔÄãÒªÔÚÔ­Áϵ½À´Ö®Ç°¾ÍҪ׼±¸ºÃËü£¬·ñÔòÔ­ÁÏÀ´ÁËûµØ·½·Å£¬»á³öÎÊÌâµÄ¡£ÓÃob_start()µÃµ½ÒªÑ¹ËõµÄÒ³ÃæÖ®ºó£¬ÎÒÃǾͿÉÒÔÖÆ×÷ѹËõ±ý¸ÉÁË£¬²»¶Ô£¬Ó¦¸ÃÊÇ¿ÉÒÔѹËõÒ³ÃæÁË£¡²»¹ýºÃÏñ»¹È±ÉÙһ̨ѹËõ»ú£¬ EZ£¬ÎÒÃÇÓÃPHP´øµÄzlibÀ©Õ¹×öһ̨£º

function ob_gzip($content) // $content ¾ÍÊÇҪѹËõµÄÒ³ÃæÄÚÈÝ£¬»òÕß˵±ý¸ÉÔ­ÁÏ
{    
    if(    !headers_sent() && // Èç¹ûÒ³ÃæÍ·²¿ÐÅÏ¢»¹Ã»ÓÐÊä³ö
        extension_loaded("zlib") && // ¶øÇÒzlibÀ©Õ¹ÒѾ­¼ÓÔØµ½PHPÖÐ
        strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")) //¶øÇÒä¯ÀÀÆ÷˵Ëü¿ÉÒÔ½ÓÊÜGZIPµÄÒ³Ãæ
    {
        $content = gzencode($content." \n//´ËÒ³ÒÑѹËõ",9); Ϊ׼±¸Ñ¹ËõµÄÄÚÈÝÌùÉÏ“//´ËÒ³ÒÑѹËõ”µÄ×¢ÊͱêÇ©£¬È»ºóÓÃzlibÌṩµÄgzencode()º¯ÊýÖ´Ðм¶±ðΪ9µÄѹËõ£¬Õâ¸ö²ÎÊýÖµ·¶Î§ÊÇ0-9£¬0±íʾÎÞѹËõ£¬9±íʾ×î´óѹËõ£¬µ±È»Ñ¹Ëõ³Ì¶ÈÔ½¸ßÔ½·ÑCPU¡£
        
        //È»ºóÓÃheader()º¯Êý¸øä¯ÀÀÆ÷·¢ËÍһЩͷ²¿ÐÅÏ¢£¬¸æËßä¯ÀÀÆ÷Õâ¸öÒ³ÃæÒѾ­ÓÃGZIPѹËõ¹ýÁË£¡
        header("Content-Encoding: gzip");
        header("Vary: Accept-Encoding");
        header("Content-Length: ".strlen($content));
    }
    return $content; //·µ»ØÑ¹ËõµÄÄÚÈÝ£¬»òÕß˵°ÑѹËõºÃµÄ±ý¸ÉËͻع¤×÷̨¡£
}

 

ѹËõ»ú×öºÃÁËÖ®ºó£¬ÎÒÃǰÑѹËõ»ú·Åµ½¹¤×÷̨ÉÏ£¬ÓÚÊÇÔ­À´µÄob_start()±ä³É

ob_start('ob_gzip'); //û´í£¬¾ÍÊǸøob_start()¼ÓÒ»¸ö²ÎÊý£¬²ÎÊýÃû¾ÍÊÇÎÒÃǸղÅ×öµÄ“ѹËõ»ú”µÄº¯ÊýÃû¡£ÕâÑùµ±ÄÚÈݽøÈ뻺³åÇøºóPHP¾Í»áµ÷ÓÃob_gzipº¯Êý°ÑËüѹËõÁË¡£

ºÃÁË£¬ËùÓеŤ×÷ÒÑÍê³É£¬×îºó½»»õ£º

ob_end_flush(); //½áÊø»º³åÇø£¬Êä³öÄÚÈÝ¡£µ±È»£¬²»ÓÃÕâ¸öº¯ÊýÒ²ÐУ¬ÒòΪ³ÌÐòÖ´Ðе½×îºó»á×Ô¶¯½«»º³åÇøÄÚÈÝÊä³ö¡£

ÍêÕûµÄʾÀýÈçÏ£º

<?php
//ÆôÓÃÒ»¸ö´øÓÐob_gzipѹËõ»úµÄ¹¤×÷̨
ob_start('ob_gzip');
//×¼±¸Ò»Ð©´ýѹËõµÄÄÚÈÝ
for($i=0; $i<100; $i++)
{
    echo('ÕâÀïÊÇѹËõ±ý¸ÉµÄÔ­ÁÏ£¬ÕâÀïÊÇѹËõ±ý¸ÉµÄÔ­ÁÏ£¬Ô­ÁÏ');
}
//Êä³öѹËõ³É¹û
ob_end_flush();
//ÕâÊÇob_gzipѹËõ»ú
function ob_gzip($content)
{   
    if(    !headers_sent() &&
        extension_loaded("zlib") &&
        strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
    {
        $content = gzencode($content." \n//´ËÒ³ÒÑѹËõ",9);
       
        header("Content-Encoding: gzip");
        header("Vary: Accept-Encoding");
        header("Content-Length: ".strlen($content));
    }
    return $content;
}
?>

¾­¹ýʵ¼Ê²âÊÔ£¬ÉÏÃæ´úÂëÖÐÈç¹û²»ÓÃGZIP£¬ÊÇ4.69KB=4802.56B£¬ÆôÓÃGZIPºóËõСΪ104B £¬ßÀ……ÎÒÊýѧ¿ÉÄܲ»ºÃ£¬×Ô¼ºËãÏÂѹËõµ½ÁËÔ­À´µÄ°Ù·ÖÖ®¶àÉÙ°É¡£¡£

ÁíÍ⣬ÏÂÃæÊÇÓÃFlashGet»ñÈ¡µÄÈÕÖ¾ÐÅÏ¢£¬¿ÉÒÔ¿´µ½ÎÒÃdzÌÐòÀï¼ÓµÄheaderÐÅÏ¢£º

Fri Jan 25 17:53:10 2008 HTTP/1.1 200 OK
Fri Jan 25 17:53:10 2008 Server: Microsoft-IIS/5.1
Fri Jan 25 17:53:10 2008 Date: Fri, 25 Jan 2008 09:53:10 GMT
Fri Jan 25 17:53:10 2008 Connection: close
Fri Jan 25 17:53:10 2008 X-Powered-By: PHP/5.2.5
Fri Jan 25 17:53:10 2008 Content-Encoding: gzip
Fri Jan 25 17:53:10 2008 Vary: Accept-Encoding
Fri Jan 25 17:53:10 2008 Content-Length: 104
Fri Jan 25 17:53:10 2008 Content-type: text/html


ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0Î»ÍøÒíÍøÓÑ·¢±íÁËÆÀÂÛ ²é¿´ÍêÕûÄÚÈÝ