PHP使用zlib擴充套件實現頁面GZIP壓縮輸出

2022-02-20 10:53:59 字數 1611 閱讀 6144

有點羅嗦,下面說正事:

正如要製作壓縮餅乾,先要拿到原料,要壓縮乙個頁面,首先要獲得要輸出的內容。php中的ob_start()(ob => output buffer)函式可以實現這個功能,它可以把程式裡準備輸出的內容先放到乙個叫做「緩衝區」的地方,當然,你可以理解為製作壓縮餅乾的暫時放原料的工作台。

這個函式一定要在頁面輸出之前使用,所以一般把它放在**的最頂端。因為它就像是乙個工作台,所以你要在原料到來之前就要準備好它,否則原料來了沒地方放,會出問題的。用ob_start()得到要壓縮的頁面之後,我們就可以製作壓縮餅乾了,不對,應該是可以壓縮頁面了!不過好像還缺少一台壓縮機, ez,我們用php帶的zlib擴充套件做一台:

function ob_gzip($content) // $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++)

//輸出壓縮成果

ob_end_flush();

//這是ob_gzip壓縮機

function ob_gzip($content)

return $content;

}?>

經過實際測試,上面**中如果不用gzip,是4.69kb=4802.56b,啟用gzip後縮小為104b ,呃……我數學可能不好,自己算下壓縮到了原來的百分之多少吧。。

另外,下面是用flashget獲取的日誌資訊,可以看到我們程式裡加的header資訊:

PHP使用zlib實現頁面的gzip壓縮輸出

php中的gzip gnu zip 是一種壓縮技術。經過gzip壓縮後頁面大小可以變為原來的30 甚至更小。這樣使用者瀏覽的時候就會感覺很快。要實現gzip壓縮頁面需要瀏覽器和 伺服器共同支援,實際上就是伺服器壓縮,傳到瀏覽器後瀏覽器解壓並解析。瀏覽器那邊不需要我們擔心,因為現在絕大多數瀏覽器都支援...

centos安裝PHP的zlib擴充套件的例項教程

一台伺服器,編譯php時未設定引數,導致缺少zlib擴充套件,無法執行解壓縮,錯誤資訊是 fatal error call to undefined function gzopen 首先找到當初編譯php時的目錄,如果沒了就找乙個相同版本的解壓縮,解壓縮到php 假設 目錄下,然後以root身份進入...

不重新編譯PHP為PHP安裝zlib擴充套件

原文 一台伺服器,編譯php時未設定引數,導致缺少zlib擴充套件,無法執行解壓縮,錯誤資訊是 fatal error call to undefined function gzopen 首先找到當初編譯php時的目錄,如果沒了就找乙個相同版本的解壓縮,解壓縮到php 假設 目錄下,然後以root身...