使用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_ *东西对此没有帮助。