页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...
我們可以使用PHP自帶的緩存機制來完成頁面靜態(tài)化,但在這里,需要說明一點,僅靠PHP緩存機制并不能完美的解決頁面靜態(tài)化,往往需要和其他頁面靜態(tài)技術(shù)(通常是偽靜態(tài)技術(shù))結(jié)合使用
例子:
當(dāng)訪問一個頁面時,先判斷是否存在緩存,存在則直接輸出緩存文件中的內(nèi)容,否則,先查詢數(shù)據(jù)庫,獲得數(shù)據(jù),生成緩存文件。
?
詳解PHP緩存機制:
output_buffering,常用的函數(shù)
ob_start() 開啟PHP緩存機制功能
ob_get_contents() 返回輸出緩沖區(qū)的內(nèi)容
ob_clean() ?清空(擦掉)輸出緩沖區(qū)
ob_end_clean() ?清空(擦除)緩沖區(qū)并關(guān)閉輸出緩沖
ob_flush() ?沖刷出(送出)輸出緩沖區(qū)中的內(nèi)容
ob_end_flush() ?沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
flush() 刷新輸出緩沖(刷新程序緩存內(nèi)容)
通常是ob_flush();flush()同時一起使用
使用ob_start()把輸出那同輸出到緩沖區(qū),而不是到瀏覽器。
然后用ob_get_contents()得到緩沖區(qū)的數(shù)據(jù)。
ob_start()在服務(wù)器打開一個緩沖區(qū)來保存所有的輸出。所以在任何時候使用echo ,輸出都將被加入緩沖區(qū)中,直到程序運行結(jié)束或者使用ob_flush()來結(jié)束。然后在服務(wù)器中緩沖區(qū)的內(nèi)容才會發(fā)送到瀏覽器,由瀏覽器來解析顯示。
函數(shù)ob_end_clean() 會清除緩沖區(qū)的內(nèi)容,并將緩沖區(qū)關(guān)閉,但不會輸出內(nèi)容。
此時得用一個函數(shù)ob_get_contents()在ob_end_clean()前面來獲得緩沖區(qū)的內(nèi)容。
這樣的話, 能將在執(zhí)行ob_end_clean()前把內(nèi)容保存到一個變量中,然后在ob_end_clean()后面對這個變量做操作。
?
面試題:
簡述ob_flush()和flush()的區(qū)別!
答:①ob_flush() 沖刷出(送出)輸出緩沖區(qū)中的內(nèi)容②flush() 刷新輸出緩沖(刷新程序緩存內(nèi)容)該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器該函數(shù)將當(dāng)前為止程序的所有輸出發(fā)送到用戶的瀏覽器個別web服務(wù)器程序,特別是Win32下的web服務(wù)器程序,在發(fā)送結(jié)果到瀏覽器之前,仍然會緩存腳本的輸出,直到程序結(jié)束為止。有些Apache的模塊,比如mod_gzip,可能自己進行輸出緩存,這將導(dǎo)致flush()函數(shù)產(chǎn)生的結(jié)果不會立即被發(fā)送到客戶端瀏覽器。甚至 瀏覽器也會在顯示之前,緩存接收到的內(nèi)容。例如:Ⅰ Netscape 瀏覽器會在接受到換行或 html 標記的開頭之前緩存內(nèi)容,并且在接受到</table> 標記之前,不會顯示出整個表格。Ⅱ 一些版本的 Microsoft Internet Explorer 只有當(dāng)接受到的256個字節(jié)以后才開始顯示該頁面,所以必須發(fā)送一些額外的空格來 讓這些瀏覽器顯示頁面內(nèi)容?
?
淺談ob_flush()和flush()的用法!
flush和ob_flush的使用上有一些特別注意的地方,造成無法刷新輸出緩沖。一. flush和ob_flush的正確順序,先ob_flush再flush.如下:ob_flush(); flush();如果Web服務(wù)器的操作系統(tǒng)是windows系統(tǒng),那順序顛倒或者不使用ob_flush()也不會出現(xiàn)問題。但是在Linux系統(tǒng)上就無法刷新輸出緩沖。二. 使用ob_flush()前,確保前面的內(nèi)容大小足夠4069字符。一些Web服務(wù)器的output_buffering默認是4069字符或者更大,//一般是php.ini中 output_buffering = 4069 即輸出內(nèi)容必須達到4069字符服務(wù)器才會flush刷新輸出緩沖,為了確保flush有效,最好在ob_flush()函數(shù)前有以下語句:print str_repeat(" ", 4096);以確保到達output_buffering值。?
如果要測試PHP緩存機制,需要做如下配置:
php.in文件display_errors = Onoutput_buffering = Offerror_reporting = 設(shè)置錯誤級別錯誤級別:E_ALL (Show all errors, warnings and notices including coding standards.)E_ALL & ~E_NOTICE (Show all errors, except for notices)E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)?
轉(zhuǎn)載于:https://www.cnblogs.com/Zell-Dinch/p/3901721.html
總結(jié)
以上是生活随笔為你收集整理的页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络之网络概述:2、标准化工作及其
- 下一篇: 51单片机之工作周期与时序