我读了一个大文本文件~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,这应该不是一个直接的问题.