php輸出快取模式:**快取
指令碼輸出echo/print_r ===> php_buffer ===> tcp_buffer ===> 瀏覽器_buffer ===> 瀏覽器顯示
1-瀏覽器_buffer(echo str_repeat("
", 200).'hello sjolzy.cn
';),這裡是否是瀏覽器快取的影響還是輸出足夠大爆到最大快取了,還需要研究
2-php_buffer由7個ob_系列函式控制,作用附後
--php_buffer範圍內可以開啟多級緩衝區,此時ob_系列函式的控制類似堆疊的多級進出控制
--在官方文件中提到當開啟多級緩衝的時候,ob_系列函式中某些影響頂層緩衝,有些影響當前緩衝
--我想這是翻譯的問題,應該都表示當前緩衝
--在apache.php.ini中output_buffering = 4096,就相當於開啟了第乙個緩衝區
--當此緩衝區的具體數值似乎不起效,只有off或者0才看到關閉第一層緩衝區的效果
3-tcp_buffer由2個函式控制,flush()手動,ob_implicit_flush()自動
--這兩個函式是在tcp_buffer範圍起效,所以對於php_buffer範圍內的ob_系列函式來說是全域性的
--由於有tcp_buffer緩衝的存在,又不知道這個快取有多大,所以瀏覽器是否顯示資訊,絕對一定要受到這2個函式的影響
--無論php_buffer緩衝是否已滿,是否已被ob_系列函式刷出
--在thinkphp3.2.0中2次使用ob_get_clean(),第一次無輸出,第二次有輸出,就是因為第一次顯示關閉了ob_implicit_flush(0)
--而第二次的輸出就是超過了tcp_buffer上限的輸出
ob_系列函式 序號
名稱關閉
刷出獲得內容清空1
ob_clean××
×√2ob_end_clean√×
×√3ob_end_flush√√
×√4ob_flush×√
×√5ob_get_clean<2,6>√×
√√6ob_get_contents××
√×7ob_get_flush
<3>√√
√√備註:ob_end_flush()和ob_get_flush()的情況有點特別
--函式尾的_flush應該表示的是將緩衝區的內容放到tcp_buffer中
--如果當前緩衝區的外層沒有緩衝區,情況確實如此,使用flush()後就可在瀏覽器輸出
--但是當當前緩衝區外層還有緩衝區時,此_flush就不是放入tcp_buffer而是放入上級(不是最外層)緩衝區尾部
--切記!
PHP重新整理輸出緩衝
同 樣的道理,在php中,當執行echo,print的時候,輸出並沒有立即通過tcp傳給客戶端瀏覽器顯示,而是將資料寫入php buffer。php output buffering機制,意味在tcp buffer之前,建立了一新的佇列,資料必須經過該佇列。當乙個php buffer寫滿的時候,指令...
PHP中輸出緩衝
在php中,當執行echo,print的時候,輸出並沒有馬上通過tcp傳給client瀏覽器顯示,而是將資料寫入php buffer。php output buffering機制,意味在tcp buffer之前,建立了一新的佇列,資料必須經過該佇列。當乙個php buffer寫滿的時候,指令碼程序會...
PHP中重新整理輸出緩衝
buffer是乙個記憶體位址空間,linux系統預設大小一般為4096 1kb 即乙個記憶體頁。主要用於儲存速度不同步的裝置或者優先順序不同的 裝置之間傳辦理資料的區域。通過buffer,可以使程序這間的相互等待變少。這裡說乙個通俗一點的例子,你開啟文字編輯器編輯乙個檔案的時候,你每輸入 乙個字元,...