我正在使用PHP工具处理大量数据并需要一段时间才能完成.我想让用户随时了解最新情况并处理当前任务.
您认为最好的方法是什么?我有一些想法,但不能决定最有效的一个:
旧方法:执行脚本的一小部分,并使用Meta Redirect或JavaScript计时器向用户显示页面,以发送继续脚本的请求(如/script.php?step=2
).
不断发送AJAX请求以读取PHP通过fwrite()不断更新的服务器文件.
与上面相同,但PHP更新数据库中的字段而不是保存文件.
这些听起来不错吗?有任何想法吗?
谢谢!
不是写入使用AJAX或额外数据库字段获取的静态文件,而是为什么不再使用另一个PHP脚本来返回指定任务的完成百分比.然后,您的页面可以通过非常轻量级的AJAX请求更新进度到所述PHP脚本.
至于实现这个"进展"脚本,如果我通过"处理大量数据"更深入地了解你的意思,我可以提供更多的建议.如果要写入文件,则"progress"脚本可以只检查文件大小并返回完成百分比.对于更复杂的任务,您可以为特定流程分配基准,并根据最后完成或当前正在运行的流程返回估计的完成百分比.
UPDATE
这是一种"检查活动脚本的进度"的建议方法,它只是等待来自请求的响应.我有一个数据挖掘应用程序,我使用类似的方法.
在您正在等待的请求的脚本中(您想要检查其进度的脚本),您可以存储(在文件或数据库中,我使用数据库,因为我有数百个进程在任何时间运行所有这些都需要跟踪他们的进度,我有另一个脚本,允许我监视这些过程的进度)这个过程的进度变量.当过程开始时,将其设置为1.您可以轻松选择脚本将传递的任意数量的"检查点",并计算给定当前检查点的百分比.但是,对于大型请求,您可能更有兴趣知道请求已完成的大致百分比.一种可能的解决方案是知道返回内容的大小,并根据随时收到的百分比设置状态变量.即 如果您在循环中收到请求数据,则每次迭代都可以更新状态.或者,如果要下载到平面文件,则可以轮询文件的大小.如果您知道请求完成所需的大致时间并简单地与脚本的当前执行时间进行比较,则可以通过时间(而不是文件大小)更准确地完成此操作.显然这些都不是完美的解决方案,但我希望他们会给你一些洞察你的选择.