我必须逐行阅读CSV文件,这可能是10到20兆。 file()是无用的;-),我必须找到最快的方法。我试着用fgets(),运行良好,但是我不知道每次我调用它时是否读取一个小块,或者如果它缓存一个较大的块并优化文件I/O。 我是否必须尝试fread()方法,自己解析EOL?在PHP中读取大文件的最佳方法是什么?
感谢 塞德里克
我必须逐行阅读CSV文件,这可能是10到20兆。 file()是无用的;-),我必须找到最快的方法。我试着用fgets(),运行良好,但是我不知道每次我调用它时是否读取一个小块,或者如果它缓存一个较大的块并优化文件I/O。 我是否必须尝试fread()方法,自己解析EOL?在PHP中读取大文件的最佳方法是什么?
感谢 塞德里克
如果可能,您应该使用fgetcsv()。
否则,总会有fgets()。
您应该看看fgetcsv()
,它会自动将昏迷分离线解析为数组。
至于运行效率,我不知道。您将不得不运行一个快速测试,最好使用您期望在稍后处理的大小的文件。但是,如果fget ???我会感到惊讶?和fput?功能不是I/O优化的。
对于大文件,stream_get_line显然比fgets更高效。如果你为阅读指定了一个明智的最大长度,我没有看到任何理由为什么PHP将不得不'阅读'阅读一行,因为你似乎很担心。
如果您想使用CSV,那么fgetcsv会以更明智的格式返回结果。
默认PHP设置允许每个进程的最大内存使用量为8 Mb。在这种情况下,20Mb很大。 (我知道你可以改变这种情况,但显然你为什么不想这么做)。 – 2008-11-05 13:47:17