我有一个类似的PHP脚本:
$i=0;
for(;$i<500;++i) {
//Do some operation with files numbered 0 to 500;
}
问题是,脚本工作并显示最终结果,但操作需要一段时间,并且观看空白屏幕可能会令人沮丧。我在想是否有某种方法可以在客户端继续更新页面,详细说明当前正在处理哪个文件。也就是说,我可以显示并持续更新 $ i 的当前值吗?
解决方案
谢谢大家!输出缓冲正如建议的那样工作。然而,David提供了有价值的见解,并且正在考虑这种方法。
答案 0 :(得分:3)
您可以从PHP脚本中buffer and control the output。
但是,您可能需要考虑此设计的可扩展性。一般而言,重型流程不应在线完成。您的特定情况可能是一个优势,因为等待是可以接受的,但考虑这样的事情可以改善用户体验:
通常,这是一种更好的用户体验,因为它不会强迫用户等待。用户可以浏览站点并根据需要检查进度。此外,这种方法更好地扩展。如果您的繁重处理是直接在页面上完成的,那么当您有许多用户或数据处理负载增加时会发生什么?页面会开始超时吗?用户是否需要等待更长时间?通过使该过程发生在网站范围之外,您可以根据需要将其卸载到更好的硬件上,确保按照业务规则的要求(避免竞争条件)以串行/并行方式处理记录,保存非高峰时段的处理等
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
尝试flush()
功能。调用此函数会强制PHP将其到目前为止输出的任何内容发送到客户端,而不是等待脚本结束。
但是,一些Web服务器只会在构建完整个页面后发送输出,因此在这种情况下调用flush()将无效。
此外,浏览器本身缓冲输入,因此您可能会遇到问题。例如,某些版本的IE在收到256个字节之前不会开始显示页面。