使用PHP输出Bufferering在处理过程中发出JavaScript
我有一些PHP代码正在接收和处理大图像。 在处理图像以使用jQuery更新DOM时,我想在某些点回应一些JavaScript。 这是一些示例代码,但它不起作用。 它只等待整整5秒钟,然后让警报重复发生。 我希望它立即进行第一次警报,然后在5秒后进行下一次警报。
ob_start(); echo 'alert(\'1...\');'; ob_flush(); sleep(5); ob_start(); echo 'alert(\'2...\');'; ob_flush();
有人可以帮忙吗?
大多数浏览器会缓冲内容,直到达到特定大小。 尝试用一些东西填充它们,让你的脚本块变得更长。
另外:你应该调用flush ,而不仅仅是ob_flush,并确保关闭zlib压缩 。
我有一些PHP代码正在接收和处理大图像。 在处理图像以使用jQuery更新DOM时,我想在某些点回应一些JavaScript。
这可能超出了您必须完成的任务,但我会使用AJAX。 你当然可以得到你想要的东西,但从长远来看这种方法并不好。
不是提交整个页面并等待它爬行回来,而是使用AJAX请求上传图像并获得结果。 然后客户端上的计时器可以发出单独的 AJAX“你做得多远?” 要求。 两个PHP实例将通过在数据库中的作业条目上设置“完成”标志来进行通信。
虽然它使客户端的东西变得更复杂,但是更容易处理用户交互(例如允许用户取消长时间运行的作业)并使您的PHP代码更加集中。
将其添加到脚本顶部将起作用:
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } ob_implicit_flush(1);
据我所知, ob_implicit_flush(1)
强制刷新每个输出语句。 所以ob_flush()
其他ob_start()
和ob_flush()
调用。 我不知道这是否适合你。
alert(\'1...\');'; sleep(5); echo ''; ?>
以下是FF4的工作:
alert("1");'; flush(); sleep(5); echo ''; ?>
我很久以前就用这样的东西实现了聊天“服务器”。 它工作正常。
这个ob_ *东西对此没有帮助。