php – Fgets进展 – 更简单的方法?

我读了一个大文本文件~500MB,希望在我的阅读操作中取得进展.

为此,我现在计算文件所包含的行,然后将其与我已读过的行进行比较.这需要对文件进行两次完整的迭代.使用filesize和fgets缓冲区大小有更简单的方法吗?

我目前的代码如下:

$lineTotal = 0;
while ((fgets($handle)) !== false) {
    $lineTotal++;
}

rewind($handle);

$linesDone = 0;
while (($line = fgets($handle)) !== false) {
    progressBar($linesDone += 1, $lineTotal);
}

最佳答案 基于字节而不是行,但您可以使用
filesize快速获取文件的总大小:

$bytesTotal = filesize("input.txt")

然后,在打开文件后,您可以读取每一行,然后在文件中获取您的current position,例如:

progressBar(0, $bytesTotal);
while (($line = fgets($handle)) !== false) {
    doSomethingWith($line, 'presumably');
    progressBar(ftell($handle), $bytesTotal);
}

有一些警告说PHP整数可能无法处理超过2G的文件,但是,由于你指定的文件大约是500M,这应该不是一个直接的问题.

点赞