2008-11-05 125 views
2

我必须逐行阅读CSV文件,这可能是10到20兆。 file()是无用的;-),我必须找到最快的方法。我试着用fgets(),运行良好,但是我不知道每次我调用它时是否读取一个小块,或者如果它缓存一个较大的块并优化文件I/O。 我是否必须尝试fread()方法,自己解析EOL?在PHP中读取大文件的最佳方法是什么?

感谢 塞德里克

回答

7

如果可能,您应该使用fgetcsv()

否则,总会有fgets()。

1

fgets()应该是适合您的需求完全没有问题。即使file()应该没问题--20mb不是很大,除非你同时做了很多次。

不要忘了你可以用第二个参数调整fgets()

+0

默认PHP设置允许每个进程的最大内存使用量为8 Mb。在这种情况下,20Mb很大。 (我知道你可以改变这种情况,但显然你为什么不想这么做)。 – 2008-11-05 13:47:17

0

您应该看看fgetcsv(),它会自动将昏迷分离线解析为数组。

至于运行效率,我不知道。您将不得不运行一个快速测试,最好使用您期望在稍后处理的大小的文件。但是,如果fget ???我会感到惊讶?和fput?功能不是I/O优化的。

2

对于大文件,stream_get_line显然比fgets更高效。如果你为阅读指定了一个明智的最大长度,我没有看到任何理由为什么PHP将不得不'阅读'阅读一行,因为你似乎很担心。

如果您想使用CSV,那么fgetcsv会以更明智的格式返回结果。

相关问题