在Windows中计算PHP中的文件行数

要确定我目前使用的文件中的确切行数:

if(exec("wc -l ".escapeshellarg($strFile), $arResult)) { $arNum = explode(" ", $arResult[0]); // ... } 

什么是在Windows上做同样的最佳方式?


编辑:

另一个问题的一个尝试是:

 $file="largefile.txt"; $linecount = 0; $handle = fopen($file, "r"); while(!feof($handle)){ $line = fgets($handle); $linecount++; } fclose($handle); echo $linecount; 
  1. 有没有人用这种方式使用大文件的经验?

  2. 有没有一种方法可以使用Windows命令来确定除PHP函数以外的文件大小?


我按照评论中接受的答案推荐的命令find

我更喜欢循环遍历文件,每次读取一行并增加一个计数器,使用和计数由file()返回的数组只适用于较小的文件。

 <?php $loc = 'Ubuntu - 10.10 i386.iso'; $f = fopen($loc,'r'); $count = 0; while (fgets($f)) $count++; fclose($f); print "Our file has $count lines" . PHP_EOL; 

如果你使用file()来处理这么大的文件,它会把它全部读到内存中,这取决于你的情况。 如果这是一次“我不在乎,这是我的工作站,我有足够的内存”的情况下,或文件保证是小的,那么你可以使用

 count(file($loc)); 

否则,我会循环,特别是因为如果行动必须由许多进程执行。 在整个文件中循环计数的两种方法,但在第二种情况下,内存大大增加。

也许你可以使用:

 $length = count(file($filename)); 

哪个可以到处工作。

file()将文件读入一个数组,在换行符上分割, count()计算数组的长度。

如果它不能正常工作(例如macintosh文件),请看这里: http : //www.php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings

Windows命令来计算行号:

 find /c /v "" < type file-name.txt 

改编自愚蠢的命令行技巧:统计stdin中的行数 。