1

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

4

2 回答 2

1

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

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

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

于 2012-06-29T08:59:22.613 回答
0

Maype 一个简单的 flush() 将完成这项工作:

// ...

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

// ...

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

于 2012-06-29T09:03:16.600 回答