PHPʵÏÖÒ³ÃæGZIPѹËõÊä³ö
GZIP£¨GNU-ZIP£©ÊÇÒ»ÖÖѹËõ¼¼Êõ¡£¾¹ýGZIPѹËõºóÒ³Ãæ´óС¿ÉÒÔ±äΪÔÀ´µÄ30%ÉõÖÁ¸üС¡£ÕâÑùÓû§ä¯ÀÀµÄʱºò¾Í»á¸Ð¾õºÜˬºÜÓä¿ì£¡
ҪʵÏÖGZIPѹËõÒ³ÃæÐèÒªä¯ÀÀÆ÷ºÍ·þÎñÆ÷¹²Í¬Ö§³Ö£¬Êµ¼ÊÉϾÍÊÇ·þÎñÆ÷ѹËõ£¬´«µ½ä¯ÀÀÆ÷ºóä¯ÀÀÆ÷½âѹ²¢½âÎö¡£ä¯ÀÀÆ÷ÄDZ߲»ÐèÒªÎÒÃǵ£ÐÄ£¬ÒòΪÏÖÔÚ¾ø´ó¶àÊýä¯ÀÀÆ÷¶¼Ö§³Ö½âÎöGZIP¹ýµÄÒ³Ãæ¡£ÎÒÃÇÖ»Òª°ÑÒ³ÃæÔÚ·þÎñÆ÷¶ËѹËõÔÙÊä³öµ½ä¯ÀÀÆ÷¾ÍÐÐÁË¡£
ÓеãÂÞ࣬ÏÂÃæËµÕýÊ£º
ÕýÈçÒªÖÆ×÷ѹËõ±ý¸É£¬ÏÈÒªÄõ½ÔÁÏ£¬ÒªÑ¹ËõÒ»¸öÒ³Ãæ£¬Ê×ÏÈÒª»ñµÃÒªÊä³öµÄÄÚÈÝ¡£PHPÖеÄob_start()£¨ob => output buffer£©º¯Êý¿ÉÒÔʵÏÖÕâ¸ö¹¦ÄÜ£¬Ëü¿ÉÒ԰ѳÌÐòÀï×¼±¸Êä³öµÄÄÚÈÝÏȷŵ½Ò»¸ö½Ð×ö“»º³åÇø”µÄµØ·½£¬µ±È»£¬Äã¿ÉÒÔÀí½âÎªÖÆ×÷ѹËõ±ý¸ÉµÄÔÝʱ·ÅÔÁϵŤ×÷̨¡£
Õâ¸öº¯ÊýÒ»¶¨ÒªÔÚÒ³ÃæÊä³ö֮ǰʹÓã¬ËùÒÔÒ»°ã°ÑËü·ÅÔÚ´úÂëµÄ×î¶¥¶Ë¡£ÒòΪËü¾ÍÏñÊÇÒ»¸ö¹¤×÷̨£¬ËùÒÔÄãÒªÔÚÔÁϵ½À´Ö®Ç°¾ÍҪ׼±¸ºÃËü£¬·ñÔòÔÁÏÀ´ÁËûµØ·½·Å£¬»á³öÎÊÌâµÄ¡£ÓÃob_start()µÃµ½ÒªÑ¹ËõµÄÒ³ÃæÖ®ºó£¬ÎÒÃǾͿÉÒÔÖÆ×÷ѹËõ±ý¸ÉÁË£¬²»¶Ô£¬Ó¦¸ÃÊÇ¿ÉÒÔѹËõÒ³ÃæÁË£¡²»¹ýºÃÏñ»¹È±ÉÙһ̨ѹËõ»ú£¬ EZ£¬ÎÒÃÇÓÃPHP´øµÄzlibÀ©Õ¹×öһ̨£º
{
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Î»ÍøÒíÍøÓÑ·¢±íÁËÆÀÂÛ ²é¿´ÍêÕûÄÚÈÝ