国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

實例解說PHP動態內容的緩沖和壓縮

2024-05-04 23:04:50
字體:
來源:轉載
供稿:網友
  php4 采用了緩沖機制在你決定發送以前所有內容只是存在于緩沖中而不是直接發送給瀏覽器雖然你可以用 header 和 setcookie 函數來實現但是這兩個函數相比于功能強大的輸出函數來說只是一點“雕蟲小技”。讓我們來看看這些函數的真本事

void ob_start
(void);

本函數告訴 php 處理器把所有輸出重定向到內部緩沖
調用這個函數后就不會有輸出到瀏覽器。

string ob_get_contents(void);

  本函數把輸出緩沖返回到一個字符串
你可以用來把堆積起來的輸出一起發送到瀏覽器。當然要先關掉緩沖。

int ob_get_length(void);

本函數返回輸出緩沖的長度。

void ob_end_clean
(void);

本函數清除并關閉緩沖。在輸出到瀏覽器之前你需要使用這個函數。

void ob_implicit_flush
([int flag])

  本函數用來控制隱式緩沖瀉出
缺省為 off如果打開時對每個 print/echo 或者輸出命令的結果都發送到瀏覽器。

  二、采用輸出控制來壓縮 php 的輸出


在開始之前
要保證你的 php4 編譯時支持 zlib。

首先
初始化輸出緩沖

ob_start
();

ob_implicit_flush
(0);

?>

然后產生所有的輸出內容。

print("本例為壓縮輸出!");

?>

頁面生成以后
采用

$contents
= ob_get_contents();

ob_end_clean
();

?>


還要檢查瀏覽器是否支持壓縮數據
我們采用在變量 $http_accept_encoding 中檢查 "gzip, deflate"的辦法


if(ereg(’gzip, deflate’,$http_accept_encoding)) {

// 產生 gzip 后的內容

} else {

echo $contents;

}



?>



下面我們分析怎樣產生 gzip 輸出


// 告訴瀏覽器下面接收的是 gzip 數據。

header("content-encoding: gzip");

// 顯示 gzip 文件的文件頭

// 只要一次就夠了

echo "x1fx8bx08x00x00x00x00x00";



// 計算長度和 crc 校驗碼

$size = strlen($contents);

$crc = crc32($contents);



// 壓縮數據

$contents = gzcompress($contents, 9);



// 不能直接在這里輸出內容,因為還沒有寫入 crc 呢!

$contents = substr($contents, 0, strlen($contents) - 4);

echo $contents;



gzip_printfourchars($crc);

gzip_printfourchars($size);



function gzip_printfourchars($val) {

for ($i = 0; $i < 4; $i ++) {

echo chr($val % 256);

$val = floor($val / 256);

}

}



?>

  三、緩沖 php 的輸出

  在 php4 里能很容易的實現緩沖
我們來看例子

// 對請求的 uri 產生唯一的文件名。

$cached_file=md5($request_uri);



if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) {



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 輸出緩沖函數在操作腳本輸出方面十分有用
把緩沖壓縮后輸出能減少 80% 的輸出時間這對于存取其他數據資源例如數據庫或者 xml來說也是一個很好的緩沖機制。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长武县| 房山区| 昭通市| 若羌县| 江西省| 沙湾县| 水城县| 巴林左旗| 玛纳斯县| 玉环县| 天等县| 鲜城| 罗源县| 贡觉县| 平凉市| 日喀则市| 米易县| 合山市| 潞西市| 胶南市| 台前县| 江川县| 大悟县| 资阳市| 东兰县| 兴宁市| 和田市| 鄂伦春自治旗| 辽阳县| 辰溪县| 米林县| 凤庆县| 通江县| 南安市| 黄山市| 邯郸县| 柳州市| 辛集市| 宜黄县| 桦甸市| 夏邑县|