PHP逐行輸出(ob_flush與flush的組合)
更新時(shí)間:2012年02月04日 15:41:10 作者:
ob_flush/flush在手冊中的描述, 都是刷新輸出緩沖區(qū), 并且還需要配套使用, 所以會(huì)導(dǎo)致很多人迷惑
ob_flush/flush在手冊中的描述, 都是刷新輸出緩沖區(qū), 并且還需要配套使用, 所以會(huì)導(dǎo)致很多人迷惑…
其實(shí), 他們倆的操作對(duì)象不同, 有些情況下, flush根本不做什么事情..
ob_*系列函數(shù), 是操作PHP本身的輸出緩沖區(qū).
所以, ob_flush是刷新PHP自身的緩沖區(qū).
而flush, 嚴(yán)格來講, 這個(gè)只有在PHP做為apache的Module(handler或者filter)安裝的時(shí)候, 才有實(shí)際作用. 它是刷新WebServer(可以認(rèn)為特指apache)的緩沖區(qū).
在apache module的sapi下, flush會(huì)通過調(diào)用sapi_module的flush成員函數(shù)指針, 間接的調(diào)用apache的api: ap_rflush刷新apache的輸出緩沖區(qū), 當(dāng)然手冊中也說了, 有一些apache的其他模塊, 可能會(huì)改變這個(gè)動(dòng)作的結(jié)果..
有些Apache的模塊,比如mod_gzip,可能自己進(jìn)行輸出緩存,這將導(dǎo)致flush()函數(shù)產(chǎn)生的結(jié)果不會(huì)立即被發(fā)送到客戶端瀏覽器。
甚至瀏覽器也會(huì)在顯示之前,緩存接收到的內(nèi)容。例如 Netscape瀏覽器會(huì)在接受到換行或 html 標(biāo)記的開頭之前緩存內(nèi)容,并且在接受到 </table> 標(biāo)記之前,不會(huì)顯示出整個(gè)表格。
一些版本的 Microsoft Internet Explorer 只有當(dāng)接受到的256個(gè)字節(jié)以后才開始顯示該頁面,所以必須發(fā)送一些額外的空格來讓這些瀏覽器顯示頁面內(nèi)容。
所以, 正確使用倆者的順序是. 先ob_flush, 然后flush,
當(dāng)然, 在其他sapi下, 不調(diào)用flush也可以, 只不過為了保證你代碼的可移植性, 建議配套使用.
在IE 中,必須先輸出256個(gè)字節(jié),才起作用,如下代碼:
function execte(){
echo str_pad(" ", 256);
for ($i=1;$i<10;$i++){
echo $i."<Br>";
ob_flush();
flush();
sleep(1);
}
}
其實(shí), 他們倆的操作對(duì)象不同, 有些情況下, flush根本不做什么事情..
ob_*系列函數(shù), 是操作PHP本身的輸出緩沖區(qū).
所以, ob_flush是刷新PHP自身的緩沖區(qū).
而flush, 嚴(yán)格來講, 這個(gè)只有在PHP做為apache的Module(handler或者filter)安裝的時(shí)候, 才有實(shí)際作用. 它是刷新WebServer(可以認(rèn)為特指apache)的緩沖區(qū).
在apache module的sapi下, flush會(huì)通過調(diào)用sapi_module的flush成員函數(shù)指針, 間接的調(diào)用apache的api: ap_rflush刷新apache的輸出緩沖區(qū), 當(dāng)然手冊中也說了, 有一些apache的其他模塊, 可能會(huì)改變這個(gè)動(dòng)作的結(jié)果..
有些Apache的模塊,比如mod_gzip,可能自己進(jìn)行輸出緩存,這將導(dǎo)致flush()函數(shù)產(chǎn)生的結(jié)果不會(huì)立即被發(fā)送到客戶端瀏覽器。
甚至瀏覽器也會(huì)在顯示之前,緩存接收到的內(nèi)容。例如 Netscape瀏覽器會(huì)在接受到換行或 html 標(biāo)記的開頭之前緩存內(nèi)容,并且在接受到 </table> 標(biāo)記之前,不會(huì)顯示出整個(gè)表格。
一些版本的 Microsoft Internet Explorer 只有當(dāng)接受到的256個(gè)字節(jié)以后才開始顯示該頁面,所以必須發(fā)送一些額外的空格來讓這些瀏覽器顯示頁面內(nèi)容。
所以, 正確使用倆者的順序是. 先ob_flush, 然后flush,
當(dāng)然, 在其他sapi下, 不調(diào)用flush也可以, 只不過為了保證你代碼的可移植性, 建議配套使用.
在IE 中,必須先輸出256個(gè)字節(jié),才起作用,如下代碼:
復(fù)制代碼 代碼如下:
function execte(){
echo str_pad(" ", 256);
for ($i=1;$i<10;$i++){
echo $i."<Br>";
ob_flush();
flush();
sleep(1);
}
}
您可能感興趣的文章:
- php中flush()、ob_flush()、ob_end_flush()的區(qū)別介紹
- PHP flush()與ob_flush()的區(qū)別詳解
- php flush類輸出緩沖剖析
- php ob_flush,flush在ie中緩沖無效的解決方法
- php使用ob_flush不能每隔一秒輸出原理分析
- 簡單談?wù)刾hp中ob_flush和flush的區(qū)別
- php中ob_flush函數(shù)和flush函數(shù)用法分析
- php flush無效,IIS7下php實(shí)時(shí)輸出的方法
- PHP flush 函數(shù)使用注意事項(xiàng)
- Nginx環(huán)境下PHP flush失效的解決方法
相關(guān)文章
phpmyadmin導(dǎo)入(import)文件限制的解決辦法
最近一次在用phpmyadmin備份mysql數(shù)據(jù)庫時(shí),沒有分段大小,一下子備份了一百多M的sql數(shù)據(jù);在導(dǎo)入的時(shí)候,提示超過2M導(dǎo)入限制,前一段時(shí)間,遇到過一次,后來利用網(wǎng)站后臺(tái)的自動(dòng)分段處理了;這次又遇到這個(gè)問題,決心解決一下。2009-12-12PHP從零開始打造自己的MVC框架之路由類實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP從零開始打造自己的MVC框架之路由類實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了MVC框架路由類的原理及定義方法,需要的朋友可以參考下2019-06-06PHP封裝XML和JSON格式數(shù)據(jù)接口操作示例
這篇文章主要介紹了PHP封裝XML和JSON格式數(shù)據(jù)接口操作,結(jié)合實(shí)例形式分析了php針對(duì)xml與json格式數(shù)據(jù)接口封裝相關(guān)操作技巧,需要的朋友可以參考下2019-03-03PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法詳解
最近在開發(fā)微信公眾號(hào)功能的時(shí)候發(fā)現(xiàn)在PHP 7.1中Mcrypt已經(jīng)被棄用了,無奈只能找對(duì)應(yīng)的解決方法來替代,所以這篇文章主要給大家介紹了關(guān)于在PHP 7.1中利用OpenSSL代替Mcrypt加解密的相關(guān)資料,需要的朋友可以參考下。2017-11-11php常用數(shù)組array函數(shù)實(shí)例總結(jié)【賦值,拆分,合并,計(jì)算,添加,刪除,查詢,判斷,排序】
這篇文章主要介紹了php常用數(shù)組array函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php常用的數(shù)組操作函數(shù),包括數(shù)組的賦值、拆分、合并、計(jì)算、添加、刪除、查詢、判斷、排序等,需要的朋友可以參考下2016-12-12php 過濾英文標(biāo)點(diǎn)符號(hào)及過濾中文標(biāo)點(diǎn)符號(hào)代碼
這篇文章主要介紹了php過濾英文標(biāo)點(diǎn)符號(hào)及過濾中文標(biāo)點(diǎn)符號(hào)的方法,需要的朋友可以參考下2014-06-06PHP郵件發(fā)送類PHPMailer用法實(shí)例詳解
這篇文章主要介紹了PHP郵件發(fā)送類PHPMailer用法,詳細(xì)的講述了安裝及配置的方法與功能實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09