php中ob函数的用法
與輸出緩沖區有關的配置
在PHP.INI中,有兩個跟緩沖區緊密相關的配置項
1.output_buffering
該配置直接影響的是php本身的緩沖區,有3種配置參數.on/off/xK(x為某個整型數值);
on - 開啟緩沖區
off - 關閉緩沖區
256k - 開啟緩沖區,而且當緩沖區的內容超過256k的時候,自動刷新緩沖區(把數據發送到apache);
2.implicit_flush
該配置直接影響apache的緩沖區,有2種配置參數. on/off
on - 自動刷新apache緩沖區,也就是,當php發送數據到apache的緩沖區的時候,不需要等待其他指令,直接就把輸出返回到瀏覽器
off - 不自動刷新apache緩沖區,接受到數據后,等待刷新指令
而默認直接是開啟緩沖區的,所以我們可以直接不用ob_start(),所以我先把緩沖區關閉
下面幾個函數的用法
- ob_start() - 打開緩沖區
- ob_get_contents() - 返回輸出緩沖區的內容
- ob_flush() - 沖刷出(送出)輸出緩沖區中的內容
- ob_clean() - 清空(擦掉)輸出緩沖區
- ob_end_flush() - 沖刷出(送出)輸出緩沖區內容并關閉緩沖
- ob_end_clean() - 清空(擦除)緩沖區并關閉輸出緩沖
- flush() - 刷新輸出緩沖
ob_start()在服務器打開一個緩沖區來保存所有的輸出。所以在任何時候使用echo ,輸出都將被加入緩沖區中,直到程序運行結束或者使用ob_flush()來結束。然后在服務器中緩沖區的內容才會發送到瀏覽器,由瀏覽器來解析顯示。
ob_start();echo "Hello ";$out1 = ob_get_contents();echo "World";$out2 = ob_get_contents();輸出:
Hello World如果只是想要存儲緩存區而不是輸出的話加上ob_end_clean();
ob_start();echo "Hello ";$out1 = ob_get_contents();echo "World";$out2 = ob_get_contents();ob_end_clean();可以看到瀏覽器上沒有任何輸出,這時我們加上var_dump來看看out1、out2兩個變量
ob_start();echo "Hello ";$out1 = ob_get_contents();echo "World";$out2 = ob_get_contents();ob_end_clean(); var_dump($out1, $out2);輸出:
string(6) "Hello " string(11) "Hello World"接下來講ob_clean()跟ob_end_clean()的區別
使用 ob_end_clean()
ob_start();echo "Hello ";$out1 = ob_get_contents();echo "World1";$out2 = ob_get_contents();ob_end_clean();echo "World2<br>"; echo "World3<br>";$out3 = ob_get_contents();var_dump($out3);輸出:
World2 World3 bool(false)使用 ob_clean()
ob_start();echo "Hello ";$out1 = ob_get_contents();echo "World1";$out2 = ob_get_contents();ob_clean();echo "World2<br>"; echo "World3<br>";$out3 = ob_get_contents();var_dump($out3);輸出:
World2 World3 string(20) "World2 World3 "這里我們對out3使用轉義函數
var_dump(htmlentities($out3));輸出:
World World string(32) "World<br/>World<br/>"解釋
ob_end_clean() 跟ob_clean() 都是清空了緩沖區,不讓echo輸出到瀏覽器,這是共同點,而不同點是ob_end_clean()還關閉了緩沖區
接下來講ob_end_flush()跟ob_flush()跟flush()的區別
使用ob_end_flush()
ob_start();echo "Hello<br/>";$out1 = ob_get_contents();echo "World1<br/>";$out2 = ob_get_contents();ob_end_flush();echo "World2<br/>"; echo "World3<br/>";$out3 = ob_get_contents();var_dump(htmlentities($out3));輸出
Hello World1 World2 World3 string(0) ""補充:這里為了顯示容易觀察,我全部都給了<br>
使用ob_flush()
ob_start();echo "Hello<br/>";$out1 = ob_get_contents();echo "World1<br/>";$out2 = ob_get_contents();ob__flush();echo "World2<br/>"; echo "World3br/>";$out3 = ob_get_contents();var_dump(htmlentities($out3));輸出
Hello World1 World2 World3 string(32) "World2<br/>World3<br/>"使用flush()
ob_start();echo "Hello<br/>";$out1 = ob_get_contents();echo "World1<br/>";$out2 = ob_get_contents();flush();echo "World2<br/>"; echo "World3br/>";$out3 = ob_get_contents();var_dump(htmlentities($out3));輸出
Hello World1 World2 World3 string(67) "Hello<br/>World1<br/>World2<br/>World3<br/>"區別
可以看出ob_end_flush() 是輸出了緩沖區的內容并且關閉了緩沖區,而ob_flush()只是刷出了緩沖區內容,相當于將緩沖區清空,而flush()輸出了緩沖區內容也沒有將緩沖區清空,所以下面的緩沖區內容還會繼續追加。
總結
只能在實踐中繼續成長,有什么不對的地方望大家指出。
總結
以上是生活随笔為你收集整理的php中ob函数的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机有自带的编程软件吗,cmd打开电脑
- 下一篇: 蓝桥杯省赛 2021 杨辉三角形 pyt