在php中,咱們能夠粗略的將緩存分爲客戶端緩存(Browser緩存),服務器端緩存(Server緩存)。因爲php是基於b/s架構的,全部,咱們能夠理解爲瀏覽器端的緩存,服務器端緩存。
在服務器端php自帶的緩存中,主要能夠分爲兩大類緩存!程序緩存和ob緩存!這也是咱們學習服務器端緩存的主要內容!php
A、客戶端向服務器端發送請求響應!
B、apache服務器加載了php模塊,開啓相應的進程(或線程)運行相應的php腳本頁面!
C、在沒有開啓ob緩存的狀況下,運行的結果所有都會被放到程序緩存中,而後打包發送給瀏覽器!瀏覽器對頁面進行渲染,生成咱們最後看到的web頁面!
D、在開啓了bo緩存的狀況下,運行的結果會被分別放入到ob緩存和程序緩存中,當程序運行到最後一行的時候,就會將ob緩存中的數據刷回到程序緩存中,而後打包返回給瀏覽器!瀏覽器對頁面進行渲染,生成咱們看到的web頁面!html
a、在腳本剛開的時候調用ob_start()函數,它的做用是開啓ob緩存,究其實質是,在當前腳本中,是將php.ini配置文件的output_buffering選項開啓!可是,除了開啓ob緩存,其實obstart還有一個回調函數!在下面的例子,咱們將全部的http://替換爲了ftp://
舉例以下:web
<?php function filterWord($str) { $str = str_replace('http://', 'ftp://', $str); return $str; } ob_start('filterWord'); for($number=1; $number<=100;$number++) { $url = " http://www.google.com.hk <br/> "; echo $url; } //將ob緩存中的內容刷到程序緩存中,並關閉ob緩存 ob_end_flush(); ?>
注意:在php5.3之後ob緩存默認是開啓的!apache
b、將ob緩存中的數據,刷回到程序緩存中!
ob_flush(),將ob緩存中的內容,刷到程序緩存中!但並無關閉ob緩存
ob_end_flush(),關閉ob緩存,並將數據刷回到程序緩存中!瀏覽器
c、清空ob緩存中的內容
ob_clean(),將ob緩存中的內容清空!
ob_end_clean(),將ob緩存中的數據清空,而且關閉ob緩存!緩存
d、獲的當前ob緩存中的內容!
ob_get_contents(),獲取當前ob緩存中的內容
ob_get_clean(),獲取當前ob緩存中的內容,而且清空當前的ob緩存服務器
ob緩存在各個方面都有應用,可是,本人知道的主要是在兩個方面!
a、當網站準備作網站靜態化的時候,選擇ob緩存是一個不錯的選擇!架構
b、解決Warning: Cannot modify header information - headers already sent by的錯誤!
究其發生錯誤的緣由:是由於響應頭和相應主體位置錯位致使的!正常狀況下,服務器返回給瀏覽器的相應內容,應該是:響應頭+響應主體!
可是,若是咱們開啓了ob緩存,那麼相應頭信息(通常也就是header()函數進行設置的信息),會被放入到程序緩存中!
而其餘的輸出內容,如:echo print_r var_dump 等,都會先被放入ob緩存中!
等程序結束的時候,或者ob緩存關閉的實話,將ob緩存的內容在放入程序緩存中!從而保證響應頭信息,始終在響應主體內容以前!函數
http://blog.sina.com.cn/s/blog_9bbafb790101cmpb.html
php經典實例
php手冊學習