<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 這裡是一些與文章內容無關的 PHP 代碼</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"初始化環境...\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 文章正文開始</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<h1>用 </span><span><span class="hljs-title function_ invoke__">flush</span></span><span>() 不生效?可能是你的 Web 服務器設置有問題</h1>
<p>在 PHP 開發中,`</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>()` 函數常被用來立即將輸出發送到客戶端,而不是等到腳本執行完再統一輸出。它在實現長時間運行的任務、實時日誌顯示、或者進度條更新時非常有用。然而,很多開發者會遇到一個問題:明明調用了 <code></span><span><span class="hljs-title function_ invoke__">flush</span></span><span>()即使PHP 輸出已經被刷新,Web 服務器(如Apache、Nginx)也可能繼續緩存輸出,直到緩衝區滿或腳本結束。常見情況:
一些瀏覽器會等待一定量的數據後才開始渲染頁面,尤其是當輸出量很小的時候。常見做法:
<span><span><?php</span></span><span>
</span><span><span>// 禁用PHP 輸出緩衝</span></span><span>
</span><span><span>while</span></span> <span>(</span> <span><span class="function_ invoke__">ob_get_level</span></span> <span>() ></span> <span><span>0</span></span> <span>) {
</span><span><span class="function_ invoke__">ob_end_flush</span></span> <span>();
}
</span><span><span>echo</span></span><span> </span><span><span class="function_ invoke__">str_repeat</span></span> <span>(</span> <span><span>" "</span></span> <span>,</span> <span><span>1024</span></span> <span>);</span> <span><span>// 發送足夠數據觸發瀏覽器渲染</span></span><span>
</span><span><span>for</span></span> <span>(</span> <span><span>$i</span></span> <span>=</span> <span><span>1</span></span> <span>;</span> <span><span>$i</span></span> <span><=</span> <span><span>5</span></span> <span>;</span> <span><span>$i</span></span> <span>++) {
</span><span><span>echo</span></span><span> </span><span><span>"處理第<span>$i</span></span></span><span>步...<br> \n";
</span><span><span class="function_ invoke__">flush</span></span> <span>();
</span><span><span class="function_ invoke__">sleep</span></span> <span>(</span> <span><span>1</span></span> <span>);
}
</span><span><span>?></span></span><span>
</span></span><p>通過上述方法,你可以確保<span class="fun">flush()</span>能夠在大多數情況下正常生效。不過,請記住,輸出延遲可能是PHP、Web 服務器和瀏覽器多個環節共同影響的結果,需要逐層排查。</p> <span><span><?php</span></span><span>
</span><span><span>// 文章結束,尾部與內容無關的部分</span></span><span>
</span><span><span>echo</span></span><span> </span><span><span>"文章加載完畢。\n"</span></span> <span>;</span> <span><span>?></span></span><span>
</span></span></div></div>