在PHP中读取大文件的最佳方法?

时间:2008-11-05 13:17:40

标签: php large-files

我必须逐行读取CSV文件,可以是10到20 Meg。 file()没用;-)我必须找到最快捷的方法。

我已尝试使用fgets(),运行正常,但我不知道每次调用它时是否读取了一个小块,或者它是否缓存了更大的块并优化了文件I / O. 我是否必须尝试fread()方式,自己解析EOL?

由于 塞德里克

4 个答案:

答案 0 :(得分:7)

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

否则,总会有fgets()。

答案 1 :(得分:2)

stream_get_line显然比大文件的fgets更有效。如果您为读取指定了合理的最大长度,我没有看到任何理由为什么PHP必须“提前读取”以读取一行,因为您似乎在担心。

如果您想使用CSV,那么fgetcsv将以稍微更合理的格式返回结果。

答案 2 :(得分:1)

fgets()应该完全可以满足您的需求。即使file()也应该没问题 - 除非你同时做很多次,否则20mb不是很大。

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

答案 3 :(得分:0)

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

至于运行时效率,我不知道。您必须运行快速测试,最好使用您希望稍后处理的文件大小。但如果fget ???我会感到惊讶和fput ???函数未进行I / O优化。