我已经在使用此example of how to read large data files in PHP line by line
现在,它想要做的是获取文件中的总行数,以便我可以显示一个完整的百分比或至少是总行数,这样我就可以提供多少知识处理还有待完成。
有没有办法在没有读取整个文件两次的情况下获得总行数? (一次计算行数,一次进行处理)
答案 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)
如何计算一本书中的页数,而不计算它们? 您可以测量页面的宽度和书籍的宽度,然后将它们除以另一个。
在这里,计算前几行的平均线长,然后用文件大小做同样的数学运算......