◆壓縮輸出 gzip
利用Apache中的mod_gzip模組,我們可以利用gzip的壓縮演算法來對Apache伺服器發布的網頁內容進行壓縮後再傳輸到用戶端的瀏覽器。如果是純文字的內容,效果非常明顯,大約可以壓縮到原來的30%-40%,使使用者的瀏覽速度大大加快。
Gzip需要用戶端瀏覽器支援,目前大部份瀏覽器都支援gzip,如IE,Netscape,Mozilla等,所以這種方法值得一試。我們可以利用PHP中的預定義變數$_SERVER[‘HTTP_ACCEPT_ENCODING’]來判斷用戶端瀏覽器是否支援gzip。
gzip1.php
if(
ereg
(
'gzip'
,
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
])) {
???
//
瀏覽器支援
} else {
???
//
瀏覽器不支援,輸出其它內容
}
?>
接下來我們對上面這個PHP程式進行擴充,使用
ob_start(ob_gzhandler)來將網頁內容壓縮,存入緩衝並發送給支援gzip的瀏覽器,瀏覽器會自動將壓縮後的內容解壓,顯示。
gzip2.php
define
(
'MAX'
,
100
);
if(
ereg
(
'gzip'
,
$_SERVER
[
'HTTP_ACCEPT_ENCODING'
]))
{
???
//
瀏覽器支援
gzip
,將內容壓縮並緩衝輸出
????
ob_start
(
"ob_gzhandler"
);
????
$output
=
''
;
????for(
$i
=
0
;
$i
MAX
;
$i
++)
????{
????????
$output
.=
"This is line $i
"
;
????}
????echo
"
瀏覽器支援
gzip
壓縮輸出
"
;
????echo
$output
;
}
else
{
????
//
瀏覽器不支援,直接輸出
????
for(
$i
=
0
;
$i
MAX
;
$i
++)
????{
????????
$output
.=
"This is line $i
"
;
????}
????
????echo
"
瀏覽器不支援
gzip
壓縮輸出
"
;
????echo
$output
;
}
?>
?
使用gzip壓縮產生的網頁的HTTP頭資訊與一般的網頁相比中會多出這樣的資訊:
Content-Encoding: gzip
Content-Length: 270
?
如果你想得到更詳細的資訊,請參看mod_gzip項目首頁:
http://sourceforge.net/projects/mod-gzip/
?
類似地,我們也可以利用mod_deflate,壓縮率比mod_gzip略低一些。調用zip函數需要耗用伺服器記憶體,所以要慎用,視需求而定。