来自php的回声“就像它去了”

时间:2011-02-25 23:12:47

标签: buffer echo execution

在脚本结束之前打印内容时,从php脚本打印结果的方法是什么?我尝试使用输出缓冲区,在回声之间放置sleep()进行测试,但结果总是在脚本执行后显示。它也是一个浏览器方面的东西吗?

6 个答案:

答案 0 :(得分:4)

您可以在PHP脚本中尝试将所有当前输出刷新到用户的浏览器,这是对ob_flush的调用,但实际上它还取决于许多其他内容。

HTTP服务器有自己的缓冲,浏览器可能无法立即呈现它收到的每个数据包。它就像一个不同级别的长缓冲区管道,在浏览器中看到任何内容之前都必须刷新,并且PHP输出缓冲区处于最高级别。

答案 1 :(得分:3)

是的,你可以这样做

<?php
 echo "hello senad";
 flush();
 sleep(20);
 echo "meskin";
?>

答案 2 :(得分:1)

PHP是服务器端。如果您正在创建一个网页,那么在脚本结束并传输之后,结果将始终显示在客户端上。

如果您在自己的计算机上运行脚本,那么我听说在执行期间打印一个脚本,在脚本完成后打印另一个脚本。尝试在打印和回显之间切换,看看结果如何。

答案 3 :(得分:1)

有两种解决方案:

1)在php.ini中取消激活output_buffering

2)使用循环时,请使用此示例:

for ($i = 1; $i <= 3; $i++) {
  echo md5(rand())."<br />";
  flush(); 
  ob_end_flush();     
  sleep(1);
}

答案 4 :(得分:0)

PHP一次加载一个页面然后显示它。使用flush()在脚本加载时显示输出。

答案 5 :(得分:0)

很好的问题..当我想做类似的事情时(比如登录动作)我只使用AJAX。而且我知道这可能不是你想要的但是听我说..我到目前为止已经遇到过这个问题4次并且我已经使用了AJAX,因此我能够放一个预加载器(这真的很酷,很有帮助:))

通过“使用ajax”我的意思是如果你有4个动作来显示4个ajax请求。我知道这不是最优雅的解决方案(因为你做了很多额外的工作)但它是一个很好的设计方案。