二,PHP緩存機制詳解

一,PHP緩存機制詳解php

      咱們可使用PHP自帶的緩存機制來完成頁面靜態化,可是僅靠PHP自身的緩存機制並不能完美的解決頁面靜態化,每每須要和其餘靜態化技術(一般是僞靜態技術)結合使用。html

      output buffer是php自帶緩存,能夠經過配置php.ini關閉,程序緩存是一直開啓狀態,無法關閉。程序緩存中內容無法修改,output buffer中內容能夠修改,修改完成後所有發給程序緩存。apache

      當咱們設計一個通訊協議時,「消息頭/消息體」的分割方式是很經常使用的,消息頭告訴對方這個消息是幹什麼的,消息體告訴對方 怎麼幹。HTTP傳輸的消息也是這樣規定的,每個HTTP包都分爲HTTP頭和HTTP體兩部分,後者是可選的,而前者是必須的。一個網頁對應一個消息,發送消息時候,通常來講,都是先消息頭部分,在消息頭部分指明瞭 消息體部分的長度,而後使用\r\n\r\n來表示消息頭部分結束,接下來是消息體部分。若是沒有定義消息頭,發送默認的消息頭。瀏覽器

      由圖可知,瀏覽器向apache發送http請求後,apache根據httpd.conf文件,將請求轉發給php處理模塊,php處理模塊根據php.ini處理test2.php,若是php.ini關閉output buffer,那麼php處理模塊將信息頭部和信息內容直接發送給程序緩存,若是php.ini開啓output buffer,那麼php處理模塊將信息頭部和信息內容直接發送給Output buffer,Output buffer接收完後再發送給程序緩存。緩存

經過如下實例學習消息與php緩存,配置php.ini。學習

(1)php.ini,output_buffering=off,關閉php緩存;設計

(2)display_errors = on,顯示錯誤;日誌

(3)error_reporting=E_ALL & ~E_NOTICE,表示全部非NOTICE級別的錯誤日誌都打印出來;htm

以後執行如下代碼。blog

<?php
echo 「aaa」;
header(「content-type:text/html;charset=utf-8」);
echo 「hello」;
?>

  這段程序報警告。PHP處理模塊一邊處理程序,一邊將處理結果發送到程序緩存,處理第1行,將默認消息頭以及aaa做爲消息體一部分發送到程序緩存,執行第2行,再次發送消息頭,此時程序緩存中有消息頭了,且無法修改,此時報警告。所以能夠在程序中將output buffer開啓,

<?php
ob_start();
echo 「aaa」;
header(「content-type:text/html;charset=utf-8」);
echo 「hello」;
?>

  執行第1行開啓緩存,執行第2行,將默認消息頭以及aaa做爲消息體一部分發送給output buffer,執行第3行,修改消息頭,執行第4行,將hello發送給output buffer,程序執行完後,output buffer將消息發送給程序緩存,程序緩存輸出。

二,下面是一些php自帶緩存指令:

ob_start()  //開啓緩存

ob_clean()  //清空緩存

ob_end_clean()  //清空緩存,關閉緩存

ob_flush() //刷新緩存(將緩存現有內容輸出)

ob_end_flush()  //刷新緩存,並關閉緩存

$contents = ob_get_contents() //得到緩存內容

file_put_contents("d:/log.txt",$contents) //將緩存內容打印到文本

三,flush與ob_flush區別

flush()是輸出程序緩存指令;

ob_flush()是輸出自帶緩存指令;

相關文章
相關標籤/搜索