使用PHP解析大的.txt文件(15.5mb)

时间:2011-07-15 10:57:24

标签: php mysql fopen fgets

我的任务是将一个大的.txt文件(大约15,000行)解析成MySQL数据库。问题是我正在使用30秒的最大执行时间。我试过用这个:

        $handle = @fopen('http://www.someothersiteyouknow.com/bigfile.txt', "r"); 
    if ($handle) { 
       while (!feof($handle)) { 
           $lines[] = fgets($handle, 4096); 
       } 
       fclose($handle); 
    }

然后我可以访问$ lines数组并以我需要的方式解析数据,但脚本完成运行需要很长时间。我的感觉是我应该以块的形式读取文件,一次可能是1000行。但我只懂了如何从.txt文件的开头读取。请你正确地提出一些方法来做正确的方法吗?只是为了澄清,我不需要特定的代码示例,只需要了解如何使用PHP解析大型.txt文件。

3 个答案:

答案 0 :(得分:2)

说实话,这似乎不是最好的主意。如果多个用户同时或同时访问同一页面会怎样?您将同时处理(用户数*大文本文件)。

建议您将文件置于本地(如果文件尚不存在,则将其保存在本地),并使用本地文件。这应该有助于缩短您的交易时间

这应该有助于你达到30s限制......如果文件下载时间不超过30秒!

答案 1 :(得分:2)

考虑在你的循环中添加set_time_limit

此外,如果这是一次性的事情你可以看看用mySQL的load data file吗?

答案 2 :(得分:2)

如果您可以将文件放在服务器上,那么您可以尝试使用LOAD DATA INFILE查询。它有很多选项来解析输入,并且工作速度相当快。开始尝试文件的一小部分。如果服务器最终将所有内容插入单行,则通过指定LINES TERMINATED BY'\n'来调整'\r\n'部分。然后根据文件中的行数仔细检查行数,并SELECT其中一些行以查看表中最终的行。