【问题标题】:PHP script that reports progress to Client向客户端报告进度的 PHP 脚本
【发布时间】:2009-05-14 13:13:53
【问题描述】:

我正在编写一个执行大量重复工作的 PHP 脚本,当客户端执行它时,我希望它在完成任务时以某种方式动态地发回 HTML。 (没有 AJAX?)如何做到这一点?

【问题讨论】:

    标签: php dynamic-data


    【解决方案1】:

    您可以使用 flush(); 刷新输出缓冲区;

    比如:

    taskOne();
    echo 'Task one finished';
    flush();
    ...
    

    希望这会有所帮助。

    【讨论】:

    • 如果这是一个漫长的过程,请确保使用 set_time_limit() 给它时间来完成。如果时间太长以至于用户可能会离开(但无论如何都需要完成),则使用 ignore_user_abort()。
    • 另外,请确保您没有使用 zlib 或 gzip 压缩,因为您无法将数据刷新到页面。
    【解决方案2】:

    也许您可以使用 refresh-meta 标记或 HTTP 标头,如下所示:

    header("Refresh: 3; URL=http://www.some.org/some.html");

    浏览器将在 3 秒后刷新。如果你问我,这可能有点意思 =) 包含 AJAX 解决方案会更好,但它至少可以在没有太多 JavaScript 工作的情况下工作。

    【讨论】:

      【解决方案3】:

      最好只通过 ajax 轮询服务器。设置一个脚本,可以监控您正在运行的任务并进行轮询。这样,用户的浏览器并不总是处于加载模式,他们可以离开页面并在需要时返回。

      【讨论】:

        【解决方案4】:

        然后你需要刷新站点,因为 PHP 只在每个页面请求上运行。

        【讨论】:

        • 正如其他答案中所指出的,这可以通过 flush 和类似的命令来完成。
        猜你喜欢
        • 1970-01-01
        • 2012-08-11
        • 2013-02-13
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多