我有一个循环,每次迭代需要N秒。
for($i=0;$i<10;$i++) {
echo $i;
process(); // 10 seconds process
}
有没有一种方法可以逐步输出(在网页上)$ i,而不必等到整个循环结束?
答案 0 :(得分:5)
刷新PHP的系统写入缓冲区以及PHP正在使用的任何后端(CGI,Web服务器等)。这样做会带来一些警告,从而将电流输出一直推到浏览器。
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++) {
echo "<br> Line to show.";
echo str_pad('',4096)."\n";
ob_flush();
flush();
sleep(2);
}
echo "Done.";
ob_end_flush();
?>
阅读文档 here 。
编辑:
str_pad() -用另一个字符串将字符串填充到一定长度。 并且某些版本的Microsoft Internet Explorer仅在收到256字节的输出后才开始显示页面,因此您可能需要在刷新之前发送额外的空格以使这些浏览器显示页面。因此,出于安全考虑,请使用 str_pad() 。