<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><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>
通过上述方法,你可以确保 flush() 能够在大多数情况下正常生效。不过,请记住,输出延迟可能是 PHP、Web 服务器和浏览器多个环节共同影响的结果,需要逐层排查。
<?php // 文章结束,尾部与内容无关的部分 echo "文章加载完毕。\n"; ?>