php不缓存直接输出,如何在PHP中禁用输出缓冲
做兩件事:
禁用用戶空間輸出緩沖區(qū),或者...
在全球范圍內(nèi),通過...
output_buffering在您的php.ini中關(guān)閉,或
output_buffering使用以下命令在Apache配置中關(guān)閉
php_flag "output_buffering" Off
或僅針對您關(guān)心的腳本,通過以下任一方式...
致電ob_end_flush(),或
呼喚 ob_end_clean()
另外,通過以下任一方法,盡可能禁用服務(wù)器級別的輸出緩沖區(qū):
ob_implicit_flush()在腳本的開頭調(diào)用,或者
flush()在每個echo將輸出添加到響應(yīng)主體的語句或其他語句之后調(diào)用
較長的版本
令人困惑的是,可能存在兩個相關(guān)的緩沖層,PHP文檔在區(qū)分這兩個方面做得很差。
輸出緩沖區(qū)
PHP文檔通常將第一層稱為“輸出緩沖區(qū)”。此緩沖層僅影響到HTTP響應(yīng)正文的輸出,而不影響標(biāo)頭。您可以使用打開緩沖輸出ob_start(),ob_end_flush()或者使用或?qū)⑵潢P(guān)閉ob_end_clean()。您還可以使用output_bufferingphp.ini中的選項(xiàng)使所有腳本自動從輸出緩沖開始。
對于生產(chǎn)版本的php.ini,此選項(xiàng)的默認(rèn)值為4096,這意味著將在輸出緩沖區(qū)中緩沖輸出的前4096個字節(jié),這時將對其進(jìn)行刷新并關(guān)閉輸出緩沖。
您可以通過在php.ini文件中將設(shè)置output_buffering為Off(或使用
php_flag "output_buffering" Off
如果您使用的是Apache,請在Apache配置中使用。或者,您可以通過調(diào)用ob_end_clean()或ob_end_flush()在腳本的開頭禁用單個腳本的功能。
寫緩沖區(qū)和Web服務(wù)器緩沖區(qū)
PHP手冊將輸出緩沖區(qū)之外的內(nèi)容稱為“寫緩沖區(qū)”,以及Web服務(wù)器具有的任何緩沖系統(tǒng)。如果您通過mod_php和結(jié)合使用PHP和Apache ,而沒有使用mod_gzip,則可以調(diào)用flush()來刷新它們;否則,您可以調(diào)用。與其他后端一樣,它也可能會起作用,盡管該手冊對提供保證不屑一顧:
描述
void flush ( void )
刷新PHP的寫緩沖區(qū)以及PHP使用的任何后端PHP(CGI,Web服務(wù)器等)。這會嘗試將當(dāng)前輸出一直推送到瀏覽器,但有一些警告。
flush()可能無法覆蓋Web服務(wù)器的緩沖方案,并且對瀏覽器中的任何客戶端緩沖都沒有影響。它也不會影響PHP的用戶空間輸出緩沖機(jī)制。這意味著,如果您正在使用ob_flush()和flush()來刷新ob輸出緩沖區(qū),則必須同時調(diào)用它們。
還有兩種方法可以使PHP flush()每次您進(jìn)行echo任何操作(或執(zhí)行將輸出回顯到響應(yīng)正文的任何其他操作)時自動調(diào)用。
首先是打電話ob_implicit_flush()。請注意,該函數(shù)被欺騙性命名。鑒于其ob_前綴,任何理智的人會認(rèn)為它會影響到“輸出緩沖”,因?yàn)檫@樣做ob_start,ob_flush但是,這種情況并非如此; ob_implicit_flush()像一樣flush(),會影響服務(wù)器級別的輸出緩沖區(qū),并且不會與其他ob_功能控制的輸出緩沖區(qū)發(fā)生任何交互。
第二種是通過在php.ini 中將implicit_flush標(biāo)志設(shè)置為來全局啟用隱式刷新On。這等效于ob_implicit_flush()在每個腳本的開頭進(jìn)行調(diào)用。請注意,本手冊以“嚴(yán)重的性能隱含性”為例,對此建議不多,我在與切向相關(guān)的答案中對此進(jìn)行了探討。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的php不缓存直接输出,如何在PHP中禁用输出缓冲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猜一猜:菜看中的“玉兰片”是什么东西做的
- 下一篇: php 生成wsdl工具,php中使用z