用PHP显示部分输出

时间:2010-12-09 14:55:45

标签: php

我有这段代码:

<?php
for($i = 0; $i<30; $i++)
{
    echo "$i<br>";          
    usleep(100000); 
}

?>

我想知道如何让浏览器显示0,然后是1,然后是2,......

在我的示例中,它会加载一段时间,然后显示0-29。

6 个答案:

答案 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";

不要让我解释一下,但这对我有用。