如何在PHP中读取大文件之前获取总行数

Jus*_*tin 3 php file-io

我已经在使用这个如何逐行读取PHP中的大数据文件的示例

现在,它想要做的是获取文件中的总行数,以便我可以显示一个完整的百分比或至少是总行数,这样我就可以提供一些剩余处理的概念要完成.

有没有办法在没有读取整个文件两次的情况下获得总行数?(一次计算行数,一次进行处理)

cgp*_*cgp 12

可怜的人回答:

不,但你可以估计.计算一个简单的平均读数(使用前250行)并使用它.

estNumOfLines = sizeOfFile / avgLineSize
Run Code Online (Sandbox Code Playgroud)

您可以在创建文件时存储文件中的行数...

或者,您可以显示已处理的KB数,这将是完全准确的.


vez*_*ult 5

您可以确定文件的大小,然后通过将读取的大小相加来衡量您的进度:

$fname = 'foofile.txt';
$fsize = filesize($fname);
$count = 0;
$handle = fopen($fname, "r") or die("Couldn't get handle");
if ($handle) {
  while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    // Process buffer here..
    $count++;
    echo ($count * 4096)/$fsize . " percent read.";
  }
  fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

注意:代码改编自参考答案