2012-06-29 30 views
1

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

回答

1

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

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

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

+0

谢谢,听起来不错。如果我用jQuery AJAX做到这一点,它会输出它吗? – Ervin

+0

是的......我建议您启动一个后台进程来处理大文件 –

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