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

时间:2009-04-15 18:28:09

标签: php file-io

我已经在使用此example of how to read large data files in PHP line by line

现在,它想要做的是获取文件中的总行数,以便我可以显示一个完整的百分比或至少是总行数,这样我就可以提供多少知识处理还有待完成。

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

5 个答案:

答案 0 :(得分:12)

穷人回答:

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

estNumOfLines = sizeOfFile / avgLineSize

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

或者,您可以显示处理的KB数量,这非常准确。

答案 1 :(得分: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);
}

注意:代码改编自referenced answer

答案 2 :(得分:3)

你有什么理由需要计算行数而不是字节数吗?如果您只想知道“完成百分比”,则只需按字节数读取/总字节数来跟踪它。

答案 3 :(得分:2)

使用linux命令wc -l filename.txt这将输出文件中的行数。

答案 4 :(得分:1)

如何计算一本书中的页数,而不计算它们? 您可以测量页面的宽度和书籍的宽度,然后将它们除以另一个。

在这里,计算前几行的平均线长,然后用文件大小做同样的数学运算......