【发布时间】:2014-05-26 23:52:50
【问题描述】:
如何在长循环期间更新进度条 (html) (php -- 数据库导出/导入 mysqli)
我不想使用文件或数据库来存储临时值或循环进程,因为这会导致使用太多 IO(在基于文件的解决方案的情况下,客户端最终经常读取文件在数据写入之前)
我正在考虑一些事件类型的情况,但是输出缓冲需要太长时间来更新显示。
其次,我正在考虑其他人强加的一些向浏览器吐出 javascript 的方法,但最终导致输出的 HTML 过多(也就是转储了 1,000,000 多条记录)。
基本上,我对如何在 PHP 中发生一些非常长的过程时如何更新 Web 浏览器中的进度条持开放态度(这不是 file_upload 的东西——我意识到 PHP 的扩展允许用于获取进度,但是似乎没有任何东西可以获取服务器循环的进度)。
有什么想法吗?? --- 我真的不想从 PHP/JavaScript/HTML 迷路到其他平台,例如 node.js/cocoa/等。
【问题讨论】:
-
鉴于您上面概述的要求,我只能推荐 WebSockets 来实现您想要做的事情。话虽如此,实现 WebSockets 对于实现这一特定解决方案可能是不切实际的。
-
既不使用
[...]file or database for storing temporary values[...]也不使用例如分块编码将要求您在处理数据时在服务器上执行的每个步骤都进行更新。您只需要在想要通知用户时更新这些值。例如。如果您处理1,000,000记录,您将永远更新1,000或10,000记录的状态。 -
@t.niese - 我之前通过在文件写入之前执行
$x % 10000尝试过,但由于文件之间的短暂时间,仍然在客户端读取失败(空文件)打开、清除、写入和保存。
标签: javascript php html loops progress-bar