【问题标题】:Progress bar updates from a PHP Script来自 PHP 脚本的进度条更新
【发布时间】:2011-06-21 10:45:07
【问题描述】:

我正在编写一个执行以下操作的小应用程序:

  1. 允许用户上传 Excel 文件
  2. 从 excel 文件的每一列中读取数据并根据数据创建图像

现在我上传文件并调用循环文件的脚本,制作图像,使用每个图片名称创建一个页面(或数据库条目),然后将它们显示在屏幕上。不过,我希望它通知使用它的进度。我想要通过 ajax 调用图像的 PHP 脚本(我知道怎么做),但是对于它本质上返回一个值 JSON、HTML、纯文本并不重要。

这可行吗?我正在使用 JQuery,所以也许它的 AJAX 调用中有一个我不知道的功能?

【问题讨论】:

标签: php jquery ajax progress-bar


【解决方案1】:

我不这么认为。如果您想检查进度,则必须每 2 秒通过 jquery 检查一次,我不知道。问题是,您必须异步运行 php 脚本并在内部报告进度,您将通过 javascript 要求。你不可能上传一些东西,然后,你的 php 脚本不做任何事情就可以回答你一些事情

【讨论】:

    【解决方案2】:

    我推荐以下:

    1. 您必须制作一些进度表,例如一个文件,在其中写下格式化过程到目前为止的进度
    2. 您还需要一个 php,它读取该文件并告诉它从中读取的百分比
    3. 你需要定期用 ajax 调用这个 php,直到它读取 100%

    别忘了使用一些令牌来管理并发使用。

    【讨论】:

      【解决方案3】:

      jQuery 有一个进度条,还有几个 PHP 脚本返回“进度”,输出脚本的状态。这是我不久前看到的一个博客。替代 PHP 缓存 (APC) 方法以及 UploadProgress 方法。它们都是PECL包。希望这会有所帮助

      howto-php-and-jquery-upload-progress-bar

      【讨论】:

        【解决方案4】:

        这是可行的。

        确实有几种方法可以做到这一点,但一种非常简单的方法是拥有一个跟踪导入的数据库表。当处理一行时,更新数据库表,然后让 JavaScript 通过 Ajax 每隔几秒钟调用一次 PHP 脚本,它可以返回总行数和处理的行数,或者百分比等。

        架构可以是这样的完全简单的东西:

        Import ID | Total Rows | Processed Rows
        ---------------------------------------
        100       | 12125      | 1246
        101       | 6212       | 1302
        

        【讨论】:

          【解决方案5】:

          是的,这是可行的。它不是 jQuery 功能,因为它需要服务器端集成。这是一个关于如何实现它的粗略草图:

          1. 拥有一个存储键值对的数据库表(或其他等效类型的存储)。如果键和值都是字符串,则最简单。
          2. 启动作业时,生成一个唯一的字符串,它是您存储在数据库表中的键和值 0。用户还会被重定向到包含该唯一字符串的 URL。例如。 “/mysite/ERxQl3ew”。
          3. 使用 jQuery,用户客户端应该轮询 url “/getkeyvalue/ERxQl3ew”。此 url 应检查数据库并获取作业状态,例如“45.3”表示作业已完成 45.3%。如果页面是 JSON 字符串,则最简单。
          4. 只要该作业的状态或进度发生变化,服务器应使用键 ERxQl3ew 更新行。
          5. 当作业完成时,服务器可以将 rows 值设置为“final”以指示作业已完成。当客户端 javascript 看到该值时,它应该将用户重定向到最终目标页面,或者以其他方式向用户指示工作已完成。

          也许这听起来比实际上更复杂。实现起来相当简单。

          【讨论】:

          • 谢谢。没错,这种方式实现起来很简单,我想出于某种原因,我只是假设 AJAX 请求中内置了一些东西,可以让我从页面发回一些东西,直到它完成。显然不是,但他们绝对应该添加这样的功能;)无论如何,我会采用这个想法。感谢您的帮助!
          • APC 是您应该用来跟踪大文件的上传进度的工具。它的工作方式就像我描述的方法一样,你必须轮询一个唯一的 id。但是对于文件上传以外的其他长时间运行的工作,比如分析一个大数据集,你需要自己实现服务器端的进度更新。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 2013-03-08
          • 2011-03-27
          • 1970-01-01
          相关资源
          最近更新 更多