繁体   English   中英

有没有办法让PHP实时将数据打印到Web浏览器?

[英]Is there a way to have PHP print the data to a web browser in real time?

例如,如果我有一个echo语句,则无法保证浏览器可能立即显示它,可能会一次显示几十个echo语句,并且可能会等到整个页面完成后再显示任何内容。

有没有办法让每个echo在执行时出现在浏览器中?

您可以使用flush()强制将缓冲区内容发送到浏览器。

您可以使用“ ob_implicit_flush(true) ”启用隐式刷新。

function printnow($str, $bbreak=true){
    print "$str";
    if($bbreak){
        print "<br />";
    }
    ob_flush(); flush();
}

显然,如果你传递复杂的对象(或者至少那些没有实现__toString的对象),这将不会表现,但是,你明白了。

正如其他人所指出的那样,除了PHP(例如,Web服务器或客户端的浏览器)之外,还有一些地方可能会被挂起。 如果您确实希望确保信息在可用时显示,则可能需要一些基于AJAX的解决方案。 您将拥有一个处理显示的PHP脚本和另一个执行计算的PHP脚本,并让显示脚本向另一个执行AJAX请求。 jQuery有一些非常简单的AJAX函数可以帮助你。

如果浏览器不支持/已禁用JavaScript,那么您也希望有一个后备,这只是标准页面,可能直到最后才显示内容。

您可以在PHP中调用flush() ,但是可以保留输出的其他几个位置(例如,在Web服务器上)。 如果您正在使用输出缓冲,则还需要调用ob_flush()

您可能还会发现某些浏览器在HTML有效之前不会呈现页面,直到所有标记都关闭(如body,html)

启用隐式刷新为蓝色表示应该这样做,因为它在每个回声后调用flush,但是某些浏览器也需要设置no-cache标头。 这是我使用的。 您的里程可能因浏览器而异。

header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');

flush()是答案的一部分。 至少在一年前,在Safari中使用flush是不可靠的。 根据您的情况,我会研究涉及javascript的解决方案。 也许进度条的各种实现都有可以回收的代码/想法。

我建议使用AJAX。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM