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