PHP阅读大文本文件

时间:2010-08-16 19:31:28

标签: performance parsing memory php

我正在阅读一个基本上超过~500,000行的文件对于我正在解析并尝试通过CLI插入数据库的列。是否有更好的方法来读取它以便我可以使用它?

目前我将其插入:

$fd = fopen ($txtFileName, "r");  
while (!feof ($fd))  {     
     $buffer = fgets($fd);     
     $lines[] = $buffer;  
} 
fclose ($fd); 

$i=0;
#hearder keys $t = $lines[1];

$keys = explode('|',$t);

然而,我开始用更大的文件耗尽内存..任何帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:4)

在开始处理之前,您真的需要将所有数据都存储在内存中吗?通常最好读取一行,进行一些处理(例如计算聚合统计数据或进行数据库更新),然后丢弃它并继续下一行。

如果你确实需要对内存中的所有内容执行此操作,那么如果您的系统上没有大量可用内存,我会恭敬地建议PHP可能不适合这项工作。

答案 1 :(得分:2)

为什么不逐行阅读?首先读取标题,然后读取一行,插入值,读取一行,插入值等。那么你的内存需求将很小。

根据您访问数据库的方式,您可能希望批量插入,当然 - 但是,与一次性加载整个文件相比,100或甚至1000的批次仍将具有相对较小的内存成本

答案 2 :(得分:1)

不确定。
立即将其插入数据库,不要存储在数组