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


PHP processing tab delimited txt line by line progress/status bar

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

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

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

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

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

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

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