来自 php 的回声“按原样”

Posted

技术标签:

【中文标题】来自 php 的回声“按原样”【英文标题】:echo from php "as it goes" 【发布时间】:2011-02-25 23:12:46 【问题描述】:

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

【问题讨论】:

嗯,更近一点?为什么这不是一个真正的问题? 【参考方案1】:

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

HTTP 服务器有自己的缓冲,浏览器可能不会立即渲染它接收到的每个数据包。这就像一条长长的不同级别的缓冲区管道,在您在浏览器中看到任何内容之前都必须刷新,而 PHP 输出缓冲区处于***别。

【讨论】:

【参考方案2】:

是的,你可以这样做

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

【讨论】:

基本上这是注释,但是 echo "hello senad" 会自动刷新,sleep(20) 我只是用来演示它。 所以你可以一次发送网页的片段?【参考方案3】:

PHP 是服务器端。如果您正在制作网页,则脚本结束并传输后,结果将始终显示在客户端上。

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

【讨论】:

【参考方案4】:

有两种解决方案:

1) 停用 php.ini 中的 output_buffering

2) 使用循环时,例如:

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

【讨论】:

【参考方案5】:

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

【讨论】:

不正确,flush 只会告诉 PHP 在当前执行点显式刷新缓冲区,但它会定期刷新输出,因为它是在不受您控制的情况下生成的。【参考方案6】:

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

“使用 ajax”是指如果您有 4 个要显示的操作,则执行 4 个 ajax 请求。我知道这不是最优雅的解决方案(因为你做了很多额外的事情),但它是一个很好的设计解决方案。

【讨论】:

以上是关于来自 php 的回声“按原样”的主要内容,如果未能解决你的问题,请参考以下文章

如何为awk添加回声?

在回声中回声 <?php ?> [重复]

回声连接不接收来自广播状态通道的数据

PHP - 为啥回声打印它像零? [复制]

你如何删除以前的回声/表单 PHP

php 回声