PHP中逐行读取大文件

9

在Java中,我使用Scanner逐行读取文本文件,因此内存使用率非常低,因为一次只有一行在内存中。PHP中是否有类似的方法?

2个回答

22

使用 fseek、fgets

$handle = fopen("/tmp/uploadfile.txt", "r") or die("Couldn't get handle");
if ($handle) {
    while (!feof($handle)) {
        $line = fgets($handle);
        // Process line here..
    }
    fclose($handle);
}

PHP中读取超大文件的方法


1
这个缓冲区的问题也困扰着我。缓冲区是否包含多行,如果是,我们应该如何浏览它?我使用了大致相同的代码,但删除了 4096 参数。这也让我想知道,如果一行超过了这些 4096 字符会发生什么。 - Balmipour
6
请将 fgets($handle, 4096) 改为 fgets($handle)。PHP文档上说第二个参数的作用是:如果没有指定长度,它会一直读取流直到到达行尾。请注意修改回答内容,因为问题是关于逐行读取的。 - mikep

4

fgets($fileHandle) 是你要找的函数。你可以使用 fopen("filename.txt", "r") 获取文件句柄,然后使用 fclose($fileHandle) 关闭它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接