我有这段代码:
<?php
for($i = 0; $i<30; $i++)
{
echo "$i<br>";
usleep(100000);
}
?>
我想知道如何让浏览器显示0,然后是1,然后是2,......
在我的示例中,它会加载一段时间,然后显示0-29。
答案 0 :(得分:5)
禁用所有输出缓冲并填充输出:
while(@ob_get_clean());
for($i = 0; $i<30; $i++)
{
echo str_pad("$i<br>",4096);
usleep(100000);
}
此外,如果您的Apache正在使用mod_deflate
并且您对text/html
文件进行gzip压缩,则无法使用此功能。
答案 1 :(得分:1)
手动刷新输出缓冲区:
<?php
ob_start();
for($i = 0; $i<30; $i++)
{
echo "$i<br>";
ob_flush();
usleep(100000);
}
?>
答案 2 :(得分:0)
使用javascript。 HTML不是交互式控制台。
编辑:那些你贬低的人,请记住,我正在提出一个实际的工作解决方案。来自php的增量输出在这里绝不是一个有效的解决方案,因为在它可以缓冲的过程中有很多地方,并且浏览器没有义务在它进来时递增地呈现html。答案 3 :(得分:0)
另一种可能更快的方法是
<?php ob_implicit_flush(true); ?>
告诉php在每次输出后刷新输出缓冲区,而不是在正在处理的文件的末尾。
答案 4 :(得分:0)
根据我的经验,没有可靠的方法让网页实时发送输出数据。
有许多不同的地方可能会出错 - 虽然您可以轻松地让它在单一情况下工作,但总会有其他地方解决方案无效。
最终唯一可靠的解决方案是从shell提示符(通过SSH或其他)执行您的PHP代码,并完全绕过apache和Web浏览器。
答案 5 :(得分:0)
<?php
header('Content-type: text/html; charset=utf-8');
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
@ob_end_clean();
set_time_limit(0);
echo "Yes";
sleep(5);
echo " sir";
不要让我解释一下,但这对我有用。