【问题标题】:PHP processing tab delimited txt line by line progress/status barPHP处理制表符分隔的txt逐行进度/状态栏
【发布时间】:2012-06-30 19:21:24
【问题描述】:

我有一个导入模块,我必须逐行处理一个制表符分隔的 txt 文件。问题是该文件可能有超过 250K 行。我必须在 MySQL 数据库中进行 SELECT 和 UPDATE 或 INSERT 操作。这可能会为服务器带来长达 3-4 小时的工作。 我想放一个状态栏,显示我们在处理中的位置。我曾尝试在处理文件行时仅更新输入,但浏览器无法真正输出它,它只是冻结了。如何输出处理状态?

【问题讨论】:

    标签: php file progress-bar file-read


    【解决方案1】:

    您必须异步执行此操作,否则从浏览器到服务器的连接将超时。

    您可以在数据库中创建另一个表来保存文件处理的进度 - 您可以每处理 100 或 1000 行更新该表中的记录。

    在客户端,您可以通过询问后端并从该进度表中获取值来更新 javascript 中的进度条。

    【讨论】:

    • 谢谢,听起来不错。如果我使用 jQuery AJAX 这样做,它会为我输出吗?
    • 是的...我建议你启动一个后台进程来处理大文件
    【解决方案2】:

    也许一个简单的 flush() 就可以完成这项工作:

    // ...
    
    $done++
    if ( ($done % 1000) == 0 ) {
        print "$done of $total lines processed<br />";
        flush();
    }
    
    // ...
    

    如果您使用的是 Windows-Server,您可能会查看文档页面的 cmets,似乎有一些怪癖:http://php.net/manual/en/function.flush.php

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多