【问题标题】:How can I update a progress bar during a long loop?如何在长循环期间更新进度条?
【发布时间】: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,00010,000 记录的状态。
  • @t.niese - 我之前通过在文件写入之前执行$x % 10000 尝试过,但由于文件之间的短暂时间,仍然在客户端读取失败(空文件)打开、清除、写入和保存。

标签: javascript php html loops progress-bar


【解决方案1】:

您可以在脚本执行过程中刷新内容。

以下是一些有用的链接,指向可以解决您的问题的优秀代码示例:

您可以在此处获得有关此主题的其他想法: Show progress for long running PHP script

【讨论】:

  • 看起来很有希望——这只是第一个链接。给我一点来测试这些。这绝对看起来像是一个成功的答案。
  • #1 有效,但是 --- 它这样做是为了将 JavaScript 输出到页面。似乎是迄今为止最好的解决方案。
  • 您不仅应该再次链接外部站点,因为它们可能会消失,而是总结技术,以便读者至少对它们有一个大致的了解。 SO 应该是一个独立的知识库。
  • 好建议@t.niese,我将在下一个答案中尝试改进。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多