PHP使用zlib擴展實現頁面GZIP壓縮輸出

jopen 12年前發布 | 22K 次閱讀 PHP PHP開發

GZIP(GNU-ZIP)是一種壓縮技術。經過GZIP壓縮后頁面大小可以變為原來的30%甚至更小。這樣用戶瀏覽的時候就會感覺很爽很愉快!
要實現GZIP壓縮頁面需要瀏覽器和服務器共同支持,實際上就是服務器壓縮,傳到瀏覽器后瀏覽器解壓并解析。瀏覽器那邊不需要我們擔心,因為現在絕大多數瀏覽器都支持解析GZIP過的頁面。我們只要把頁面在服務器端壓縮再輸出到瀏覽器就行了。

要壓縮一個頁面,首先要獲得要輸出的內容。PHP中的ob_start()(ob => output buffer)函數可以實現這個功能,它可以把程序里準備輸出的內容先放到一個叫做“緩沖區”的地方,這個函數一定要在頁面輸出之前使用,所以一般把它放在代碼的最頂端。用ob_start()得到要壓縮的頁面之后,我們就可以壓縮頁面了!

代碼

function ob_gzip($content) // $content 就是要壓縮的頁面內容

 {

 if(!headers_sent() && extension_loaded("zlib") &&strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))//判斷頁面頭部信息是否輸出,PHP中zlib擴展是否已經加載,瀏覽器是否支持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_start('ob_gzip'); //給ob_start()加一個參數,參數名就是剛才的函數名。這樣當內容進入緩沖區后PHP就會調用ob_gzip函數把它壓縮了。

最后結束緩沖區

ob_end_flush(); //結束緩沖區,輸出內容。當然,不用這個函數也行,因為程序執行到最后會自動將緩沖區內容輸出。

最終完整的實例

<?php
 //調用一個函數名為ob_gzip的內容進行壓縮
 ob_start('ob_gzip');
 //輸出內容
 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;
 }
 ?>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!