亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

控制PHP的輸出:緩存并壓縮動態頁面

2020-03-22 20:01:34
字體:
來源:轉載
供稿:網友
mod_gzip是一個Apache模塊,其功能是使用Gzip壓縮靜態的html頁面,遵循IETF標準的瀏覽器可以接受gzip編碼(IE, Netscape等)。mod_gzip可以將頁面的下載時間提高4-5倍。我強烈建議你在你的web服務器上使用mod_gzip。然而,我們還必須用PHP建立我們自己的壓縮引擎。在這篇文章里,我將要介紹如何使用PHP的輸出控制函數來大幅加速頁面載入速度。 介紹PHP的輸出控制函數 PHP4中最令人滿意的事是——你可以讓PHP緩存所有由腳本生成的輸出,在你決定把它們送出之前,瀏覽器方是不會收到任何內容的。在腳本程序中你能用這些函數來設置header、cookies,然而這只是強大的輸出函數的一小部分功能。 復制代碼 代碼如下:
?php
void ob_start(void);
?
告訴PHP處理器把所有的輸出重定向到一個內部的緩存(buffer)中。在調用ob_start之前,沒有輸出會被送到瀏覽器去。 復制代碼 代碼如下:
?php
string ob_get_contents(void);
?
該函數將“輸出緩存”(output buffer)以字符串的形式返回。你可以調用該函數把積累下來的輸出送到瀏覽器中。(僅在把buffering功能關閉之后?。。?復制代碼 代碼如下:
?php
int ob_get_length(void);
?
返回緩存中的字符串的長度。 復制代碼 代碼如下:
?php
void ob_end_clean(void);
?
清空輸出緩存,并將輸出緩存關閉。在緩存中的內容輸出到瀏覽器之前,必須使用這個函數。
void 501([int flag])
用來打開/關閉隱含的flush動作開關(默認是關)。如果flush是開的,每次調用print/echo或是其它輸出命令的時候,輸出的內容會被立即送到瀏覽器端。 使用輸出控制來壓縮PHP輸出
你必須使用PHP4里編譯的Zlib擴展包來壓縮輸出。如果需要的話,可以查看PHP文檔中有關Zlib包的安裝指導。
首先,初始化輸出緩存: 復制代碼 代碼如下:
?php
ob_start();
ob_implicit_flush(0);
?
之后,用print, echo, 或其他你喜歡的方法生成所有輸出內容,例如: 復制代碼 代碼如下:
?php
print("Hey this is a compressed output!");
?
頁面生成后,我們取回輸出內容: 復制代碼 代碼如下:
?php
$contents = ob_get_contents();
ob_end_clean();
?
之后,必須檢測瀏覽器是否支持壓縮數據。如果支持,瀏覽器會發給服務器端一個ACCEPT-ENCODEING HTTP頭。我們只需檢查$HTTP_ACCEPT_ENCODING變量中是否有“gzip,deflate”字串。 復制代碼 代碼如下:
?php
if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
// 在這里生成 Gzip 壓縮的內容
} else {
echo $contents;
}
?
這種方法使用起來既簡單又結構清晰。下面讓我們看看如何生成壓縮的輸出: 復制代碼 代碼如下:
?php
//告訴瀏覽器將要收到的是gzip數據
//當然在此之前,你已經檢查了它們是否支持gzip,x-gzip數據格式
//如果支持的是x-gzip,那么下面的頭就要用z-gzip來代替
header("Content-Encoding: gzip"); //顯示gzip文件的頭
//只需顯示一次
echo "x1fx8bx08x00x00x00x00x00"; //計算出文件的大小和CRC碼
$Size = strlen($contents);
$Crc = crc32($contents); //壓縮數據
$contents = gzcompress($contents, 9); //我們不能就這樣輸出,因為CRC碼是混亂的。
//如果我在這里使用“echo $contents”,壓縮的數據會被送出,
//但是卻不完整。文件最后的四個字節是CRC校驗碼,可是只發出去了三個字節。
//最后一個字節被丟掉了。我不知道這個bug在4.0.2版中解決了沒有,
//不過最好避免錯誤的方法是把正確的CRC校驗碼加到壓縮的數據的末尾。
//
//把舊的CRC校驗碼剝離
$contents = substr($contents, 0, strlen($contents) - 4); //僅顯示壓縮的數據
echo $contents; //輸出CRC,和原來數據的大小(字節)
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) {
for ($i = 0; $i $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
} ?
//好了,你還可以按此方式附加上更多的壓縮數據。
要想進行實際的測試,所有的腳本代碼如下: 復制代碼 代碼如下:
?php
ob_start();
ob_implicit_flush(0); print("I'm compressed!n"); $contents = ob_get_contents();
ob_end_clean(); header("Content-Encoding: gzip"); echo "x1fx8bx08x00x00x00x00x00"; $Size = strlen($contents);
$Crc = crc32($contents); $contents = gzcompress($contents, 9); $contents = substr($contents, 0, strlen($contents) - 4); echo $contents; gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size); function gzip_PrintFourChars($Val) {
for ($i = 0; $i $i ++) {
echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
?
緩存PHP輸出 當PHP4還沒問世,我不得不使用PHP3的時候,我對開發一些緩存機制來減少數據庫的載入、對文件系統的存取十分感興趣。在PHP3中沒有什么特別好的方法,但是有了輸出緩存之后,在PHP4中一切變得容易多了。
這有一個簡單的例子: 復制代碼 代碼如下:
?php
//為請求的URI構造一個文件名
$cached_file=md5($REQUEST_URI); if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) {
//is_valid函數驗證緩存,你可以用這個函數檢查Cache是否過期或其他特定的條件。
//如果文件不在Cache中或者不可用則生成輸出
ob_start();
ob_implicit_flush(0);
//在此輸出…… $contents = ob_get_contents();
ob_end_clean();
$fil=fopen($cached_file,"w+");
fwrite($fil,$contents,$strlen($contents));
fclose($fil);
} /如果請求的文件在緩存中且可用,則:
readfile($cached_file); ?
這是一個簡單的例子,使用輸出緩存,你可以建立一個復雜的內容生成系統,對不同的塊或程序使用不同的緩存機制,等等…… 結論 PHP輸出控制函數對把腳本生成的輸出重定向到緩存中十分有用。為支持gzip的瀏覽器輸出壓過的緩存數據可以減少載入時間。也可作為緩存機制來減少對數據源的存?。〝祿旎蛭募?,這對使用XML意義重大。
如果我們用PHP建立一個引擎,緩存從數據源得到的數據(xml文檔和數據庫),并且動態的生成XML格式的內容(沒有外觀-presentation)我們可以得到這些XML的輸出,并使用XSLT轉換成任意一種我們想要的外觀格式(html, wap, palm, pdf等)。使用PHP4的輸出緩存和Sablotron XSLT擴展可以很好地完成這個任務。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美影视| 国产午夜精品一区二区三区| 在线播放精品一区二区三区| 国产偷国产偷亚洲清高网站| 亚洲欧美国产一本综合首页| 日韩欧美福利视频| 欧美洲成人男女午夜视频| 久久九九免费视频| 亚洲久久久久久久久久久| 日本伊人精品一区二区三区介绍| 成人中文字幕在线观看| 97久久伊人激情网| 最近2019中文字幕大全第二页| 色777狠狠综合秋免鲁丝| 亚洲午夜精品久久久久久久久久久久| 日韩福利伦理影院免费| 国产午夜精品一区二区三区| 九九久久久久久久久激情| 成人激情在线播放| 色香阁99久久精品久久久| 午夜精品福利在线观看| 日韩中文字幕在线看| 久久综合久久美利坚合众国| 久久不射热爱视频精品| 最近2019中文字幕一页二页| 久久亚洲精品小早川怜子66| 国产精品高潮视频| 91精品国产综合久久香蕉| 国产精品2018| 亚洲片国产一区一级在线观看| 国产欧美精品一区二区三区-老狼| 亚洲国产精品嫩草影院久久| 午夜精品久久久久久久久久久久| 久久不射热爱视频精品| 最近更新的2019中文字幕| 欧美理论电影在线观看| 欧美性猛交xxxx富婆弯腰| 精品无人区太爽高潮在线播放| 久久色精品视频| 国产成人一区二区在线| 亚洲精品永久免费| 国产精品视频白浆免费视频| 国产亚洲一级高清| 91精品久久久久久久久久久| 日韩中文字幕国产精品| 高跟丝袜一区二区三区| 成人写真视频福利网| 青青青国产精品一区二区| 欧美日韩美女视频| 日本人成精品视频在线| 色综合久久88| 最近中文字幕日韩精品| 精品小视频在线| 欧美亚洲另类在线| 精品无码久久久久久国产| 欧美日韩亚洲精品一区二区三区| 91免费看片在线| 亚洲人成电影网站色xx| 97不卡在线视频| 欧美日韩999| 久久久久久久久久国产| 欧美亚洲国产视频| 亚洲aⅴ男人的天堂在线观看| 亚洲电影免费观看高清完整版在线观看| 深夜成人在线观看| 久久青草福利网站| 欧美电影免费观看| 亚洲第一男人av| 亚洲第一网站男人都懂| 欧美大片第1页| 国产成人+综合亚洲+天堂| 亚洲国产精品悠悠久久琪琪| 欧美刺激性大交免费视频| 最近2019年中文视频免费在线观看| 韩日欧美一区二区| 亚洲石原莉奈一区二区在线观看| 亚洲视频网站在线观看| 日日骚av一区| 亚洲成人国产精品| 欧美野外猛男的大粗鳮| 热99精品只有里视频精品| 国产精品成人品| 91久久久久久久久久| 欧美国产极速在线| 国产精品久久久久久久久粉嫩av| 国产aⅴ夜夜欢一区二区三区| 成人午夜高潮视频| 亚洲精品视频久久| 国产亚洲aⅴaaaaaa毛片| 欧美又大又硬又粗bbbbb| 麻豆国产精品va在线观看不卡| 亚洲成**性毛茸茸| 亚洲成人久久一区| 日韩国产欧美精品在线| 一区二区三区四区视频| 色偷偷9999www| 亚洲欧洲一区二区三区在线观看| 精品二区三区线观看| 欧美激情精品久久久久久久变态| 亚洲图中文字幕| 成人激情视频小说免费下载| 亚洲性69xxxbbb| 亚洲人成欧美中文字幕| 成人黄色在线观看| 亚洲丝袜av一区| 茄子视频成人在线| 欧美日韩黄色大片| 色在人av网站天堂精品| 国产午夜精品一区理论片飘花| 亚洲综合成人婷婷小说| 亚洲成人av在线播放| 日韩福利在线播放| 日韩69视频在线观看| 色777狠狠综合秋免鲁丝| 97在线精品视频| 69久久夜色精品国产7777| 欧美成人免费一级人片100| 久久伊人色综合| 日韩电影中文 亚洲精品乱码| 欧美色欧美亚洲高清在线视频| 国产伊人精品在线| 久久精品国产一区二区三区| 国产日韩在线免费| 久久国产精品久久久| 亚洲影院在线看| 亚洲毛茸茸少妇高潮呻吟| 日韩欧美在线视频日韩欧美在线视频| 亚洲日韩第一页| 欧美丝袜一区二区三区| 久久久亚洲精品视频| 日韩av中文字幕在线免费观看| 亚洲午夜精品久久久久久久久久久久| 欧美xxxx做受欧美.88| 久久久午夜视频| 亚洲国产高清福利视频| 午夜精品福利在线观看| 欧美在线视频免费观看| 亚洲最大的网站| 国产精品美女久久久久av超清| 国产精品视频大全| 欧美电影免费观看高清完整| 日韩国产欧美精品一区二区三区| 国产精品久久久久久久久久ktv| 国产日韩精品入口| 成人妇女淫片aaaa视频| 色综合影院在线| 亚洲自拍欧美另类| 97视频在线播放| 亚洲国产小视频| 91精品国产沙发| 久久人人爽人人爽人人片av高清| 国产精品2018| 狠狠色噜噜狠狠狠狠97| 中文字幕av一区二区| 亚洲国产成人久久综合一区| 国产亚洲视频中文字幕视频| 日韩欧美一区二区三区久久| 日本电影亚洲天堂| 久久精品成人欧美大片古装| 色综合久久精品亚洲国产| 亚洲欧美国产va在线影院| 欧美中文字幕视频在线观看| 国外成人免费在线播放| 亚洲国产一区二区三区四区|