PHP处理选项卡逐行分隔txt行/状态栏

时间:2012-06-29 08:51:51

标签: php file progress-bar file-read

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

// ...

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

// ...

如果你使用的是Windows服务器,你可能会看一下文档页面的评论,似乎有一些怪癖:http://php.net/manual/en/function.flush.php