执行时PHP进度更新

时间:2012-09-13 01:09:35

标签: php

有没有办法让PHP在页面执行大脚本时显示进度?例如,如果我正在解析大型数组,我可以在整个过程中输出状态更新吗?

1 个答案:

答案 0 :(得分:1)

我能想到有四种方法可以做到这一点。我只使用过其中两个:

1)你可以定期推送输出(刷新),然后通过HOPE进入浏览器。这可能仅在某些情况下起作用 - Web服务器(apache)可能会拥有它自己的缓存并为您保留数据,直到它具有足够大的数量,ISP / Workplace / User可能有自己的缓存,可能在整个页面完成之前不要转发信息,最后浏览器可能无法显示它。所以不推荐。 (未使用)

2)对本地文件(或数据库)进行状态更新,然后通过AJAX进行查询。这已在评论中提出,您无需仅通过上传文件。您将使用AJAX调用来启动进程(使用诸如会话之类的公共标识符来链接所有调用),然后该进程将其状态更新为文件(链接到公共标识符),然后AJAX定期调用服务器并读取状态文件。当状态文件显示“已完成”时,您可以重定向到新页面(使用状态生成)或只是通过AJAX更新。这种方法非常有效 - 我最后在移动设备上使用它来保持移动站点连接,同时等待后台事件;如果所有其他方法都失败了,我会“暂停”。

3)批量运行PHP脚本。如果PHP具有最大执行时间并且您可能超过它,则需要这样做。基本上你运行了30秒,然后发送一个页面,当前状态和标题中的元刷新,开始下一个进程,从最后一个进程开始。您通过URL和HTML传递状态。如果你采用这种方法,如果浏览器永远不会从服务器回来,那么如果互联网连接狡猾,它可能会失败;所以结合AJAX方法(即AJAX调用“请先做50,等待完成,更新状态,请做下50等待,更新状态等)是一个很好的混合解决方案。你还需要确保你的脚本可以安全地处理如果您从先前处理的位置开始处理,则进行处理。

4)你打开一个从浏览器到服务器的javascript套接字,并通过套接字进行更新。我从来没有使用过这个,因为在浏览器中缺乏对套接字的支持,但如果您了解受众并且他们的浏览器能够很好地支持套接字,那么可以使用这些示例。