深圳網(wǎng)站建設(shè)編程中控制php輸出緩存有什么作用 一:輸出緩存介紹 在php所謂的輸出緩存,就是代碼中的echo 或者其他輸出命令在執(zhí)行的時(shí)候是先寫入到 php buffer,在腳本執(zhí)行完或者強(qiáng)制執(zhí)行輸出緩存的命令后,才會(huì)把數(shù)據(jù)輸出到瀏覽器(其中php buffer 就是php.ini中設(shè)置的output_buffering ,默認(rèn)是on,表明無限制大小,可以換成數(shù)字來限制大小)。 例子: echo 'hlmblog.com'; echo '技術(shù)'; echo '分享'; 這兩個(gè)echo 是按順
深圳網(wǎng)站建設(shè)編程中控制php輸出緩存有什么作用
一:輸出緩存介紹
在php所謂的輸出緩存,就是代碼中的echo 或者其他輸出命令在執(zhí)行的時(shí)候是先寫入到 php
buffer,在腳本執(zhí)行完或者強(qiáng)制執(zhí)行輸出緩存的命令后,才會(huì)把數(shù)據(jù)輸出到瀏覽器(其中php buffer
就是php.ini中設(shè)置的output_buffering ,默認(rèn)是on,表明無限制大小,可以換成數(shù)字來限制大小)。
例子:
echo 'hlmblog.com';
echo '技術(shù)';
echo '分享';
這兩個(gè)echo 是按順序插入到緩沖區(qū)的,只有腳本執(zhí)行完成或者強(qiáng)制執(zhí)行緩存輸出才會(huì)把數(shù)據(jù)輸出到瀏覽器。
如果我想要實(shí)時(shí)地輸出echo的數(shù)據(jù),見下面的代碼: 我想要實(shí)時(shí)地輸出echo的數(shù)據(jù),見下面的代碼:
ob_end_flush(); //關(guān)閉php緩存,或者在flush()前先執(zhí)行ob_flush(),下面有解釋
echo str_pad(" ", 256);
for ($i=5; $i>0; $i--) { echo $i. ' ';
flush(); sleep(1); }
注意:
1:flush和ob_flush 區(qū)別:
乍看之下兩者很像,而且很多手冊的解釋也不清楚,模凌兩可,其實(shí)兩者是有很大區(qū)別的。
當(dāng)php.ini沒有開啟php buffer緩存時(shí),php腳本輸出的內(nèi)容都會(huì)在服務(wù)端處于等待輸出狀態(tài)
,不會(huì)保存到輸出緩存,因?yàn)榫彺娑紱]開,此時(shí)利用flush可以將那些等待輸出的內(nèi)容立即輸出來發(fā)到客戶端(瀏覽器或者其他輸出端)。
當(dāng)php.ini開啟了php buffer緩存后,php腳本輸出內(nèi)容的第一步是存儲(chǔ)在輸出緩存中
,此時(shí)等到輸出的內(nèi)容是沒有數(shù)據(jù)的,用flush的話是無效果,取不到數(shù)據(jù)的。因此要先利用ob_flush把輸出緩存中的內(nèi)容取出來變成等待輸出的狀態(tài),接下來在利用flush把內(nèi)容發(fā)到客戶端。執(zhí)行的順序是先ob_flush
再 flush。
因此要實(shí)現(xiàn)實(shí)時(shí)地輸出,要么利用ob_end_flush 先關(guān)掉php 輸出緩存后直接flush,要么先 ob_flush再flush。
2:瀏覽器無法輸出實(shí)時(shí)數(shù)據(jù)
把代碼改成下面的代碼,在chrome firefox ie等瀏覽器都是一次性輸出的,很奇葩的現(xiàn)象:
ob_end_flush(); //關(guān)閉php緩存,或者在flush前ob_flush();
echo str_pad(" ", 256);
for ($i=5; $i>0; $i--) {
echo $i;
flush();
sleep(1); }
找了半天的bug,終于發(fā)現(xiàn)了個(gè)現(xiàn)象,只要順便加個(gè)html標(biāo)簽,即可實(shí)時(shí)輸出。
原因是:只有在遇到html標(biāo)簽的時(shí)候才會(huì)即時(shí)輸出,真是神奇,還好一般輸出的內(nèi)容都會(huì)帶著html標(biāo)簽,很少純文本。
解決辦法:加個(gè)回車或者其他的html標(biāo)簽即可解決問題。
二:控制緩存輸出可以用來做什么,具體的幾個(gè)示例
1:生成靜態(tài)頁面
靜態(tài)頁面的加載速度就是快,這句話是家戶喻曉的道理,不用請求數(shù)據(jù)庫,這是多么爽的事情啊。
下面是生成靜態(tài)頁面的例子:
echo str_pad('', 1024);//使緩沖區(qū)溢出
ob_start();//打開緩沖區(qū)
$content = ob_get_contents();//獲取頁面輸出的內(nèi)容
$f = fopen('./index.html', 'w');
fwrite($f, $content);//內(nèi)容寫入txt文件
fclose($f);
ob_end_clean();//清空并關(guān)閉緩沖區(qū)
傳說中的靜態(tài)頁面就這樣簡單的生成。
2:捕獲輸出
function test($param) { if($param) { ob_start();
eval($param);
$contents = ob_get_contents();
ob_end_clean();
}else { echo '遺憾的沒有輸出';
exit(); }
return $contents; }
本文由深圳網(wǎng)站建設(shè)公司云熠網(wǎng)匯總整理,歡迎轉(zhuǎn)載
如何寫出高質(zhì)量的AI提示詞呢?關(guān)于這一點(diǎn),我這里給你總結(jié)了一個(gè)通用且屢試不爽的提…
郵箱歸檔 長期保存企業(yè)來往郵件,幫助企業(yè)快速檢索郵件 多域管理 單組織支持…
企業(yè)購買阿里郵箱之后,如果需要把原郵箱系統(tǒng)中的郵件遷移到阿里郵箱中,可以由郵箱管…
隨著人工智能技術(shù)的不斷發(fā)展,聊天機(jī)器人成為了人們?nèi)粘=涣髦胁豢苫蛉钡墓ぞ?。其中,?/p>
調(diào)教AIGPT之獎(jiǎng)懲指令(有監(jiān)督學(xué)習(xí))的技巧其實(shí)這個(gè)所謂“獎(jiǎng)懲指令(有監(jiān)督學(xué)習(xí))…
ChatGPT大火,很多人都開始用他提問,提升工作效率,但是很多人還是停留在非常…
阿里云郵箱郵件遷移功能相關(guān)說明郵箱搬家是企業(yè)阿里云郵箱的郵件遷移功能,相關(guān)說明如…
很多阿里郵箱企業(yè)版的用戶不知道該怎么在pc端設(shè)置,其中Microsoft Out…
解鎖ChatGPT超高級(jí)玩法,展示動(dòng)態(tài)圖片,純干貨分享!一、解鎖ChatGPT的…