二,PHP緩存機制詳解


一,PHP緩存機制詳解

      我們可以使用PHP自帶的緩存機制來完成頁面靜態化,但是僅靠PHP自身的緩存機制並不能完美的解決頁面靜態化,往往需要和其他靜態化技術(通常是偽靜態技術)結合使用。

      output buffer是php自帶緩存,可以通過配置php.ini關閉,程序緩存是一直開啟狀態,沒法關閉。程序緩存中內容沒法修改,output buffer中內容可以修改,修改完成后全部發給程序緩存。

      當我們設計一個通信協議時,“消息頭/消息體”的分割方式是很常用的,消息頭告訴對方這個消息是干什么的,消息體告訴對方 怎么干。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級別的錯誤日志都打印出來;

之后執行以下代碼。

<?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()是輸出自帶緩存指令;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM