为什么PHP脚本在任何echo/output之前都要等待“完成脚本”?

5

考虑一个简单的脚本

<?php 
echo "hi";
foreach ($_GET['arr'] as $a)
{
 echo $a ."<br>";
}
echo "<p>Masel tov</p>";
foreach ($_GET['arr2'] as $a)
{
 echo $a ."<br>";
}

我希望脚本能持续地回显内容。然而,当脚本完成后,所有的内容都会一次性回显出来。即使是第一个"hi"也要等待1分钟后才被回显。
是否有设置可以防止这种情况发生,或者为什么会这样呢?

这里是立即回显的方法 - https://dev59.com/6XA75IYBdhLWcg3wubun#4978809 - Sunil Kumar
5个回答

5

3

有一个函数ob_implicit_flush,可以用来在每次输出调用后启用/禁用自动刷新。但是,在使用之前请查看PHP手册中的注释。


2

请检查此内容。

if (ob_get_level() == 0)
{
    ob_start();
} 
for ($i = 1; $i<=10; $i++){
        echo "<br> Task {$i} processing ";
        ob_flush();
        flush();
        sleep(1);
}
echo "<br /> All tasks finished";
ob_end_flush();

1
非常好!谢谢! - Vaclav Kusak

1
如果您想逐一显示项目并保持与每个服务器设置兼容的干净代码,则可以考虑使用ajax。除非没有其他选择来完成任务,否则我不喜欢清除缓冲区。
如果您的项目不是Web项目,则可以考虑在PHP控制台(命令行)中运行代码以获得即时输出。

-1

PHP发送数据时,正如您所注意到的那样,所有数据一次性发送(脚本完成时)- 您可以搜索类似于http://de1.php.net/manual/de/function.ob-get-contents.php这样的内容:

<?php

ob_start();

echo "Hello ";

$out1 = ob_get_contents();

echo "World";

$out2 = ob_get_contents();

ob_end_clean();

var_dump($out1, $out2);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接