给定文件夹下所有文件中的PHP_Count总行数

时间:2012-08-10 03:19:59

标签: php

只想计算文件夹中所有文件的总行数。以下php函数帮助我只计算特定文件的行号。只是想知道文件夹中总行数的方法是什么。

$lines = COUNT(FILE($file));  

谢谢。!

5 个答案:

答案 0 :(得分:1)

您可以迭代目录并计算每个文件并将它们全部加起来。并且你正在使用file()函数,它会将整个内容加载到内存中,如果文件非常大,你的php脚本将达到配置的内存限制。

如果您可以使用外部命令,则有一行解决方案。 (如果您使用的是Windows,请忽略它。)

$total = system("find $dir_path -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'");

答案 1 :(得分:0)

或许这样的事情:

<?php

$line_count = 0;
if ($handle = opendir('some/dir/path')) {
    while (false !== ($entry = readdir($handle))) {
        if (is_file($entry)) {
            $line_count += count(file($entry));
        }
    }
    closedir($handle);
}

var_dump($line_count);

?>

答案 2 :(得分:0)

查看DirectoryIterator的标准PHP库(又名SPL):

$dir = new DirectoryIterator('/path/to/dir');
foreach($dir as $file ){
  $x += (isImage($file)) ? 1 : 0;
}

(仅供参考,有一个名为iterator_count()的未记录函数,但我现在最好不要依赖它。而且你需要过滤出看不见的东西,比如。和..无论如何。)

或试试这个: -

请参阅网址: - http://www.brightcherry.co.uk/scribbles/php-count-files-in-a-directory/

$directory = "../images/team/harry/";
if (glob($directory . "*.jpg") != false)
{
 $filecount = count(glob($directory . "*.jpg"));
 echo $filecount;
}
else
{
 echo 0;
}

答案 3 :(得分:0)

计算线条的一个非常基本的例子可能类似于以下内容,它提供与xdazz's answer相同的数字。

<?php

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__));

$lines = $files = 0;
foreach ($files as $fileinfo) {
    if (!$fileinfo->isFile()) {
        continue;
    }
    $files++;
    $read = $fileinfo->openFile();
    $read->setFlags(SplFileObject::READ_AHEAD);
    $lines += iterator_count($read) - 1; // -1 gives the same number as "wc -l"
}

printf("Found %d lines in %d files.", $lines, $files);

另见

答案 4 :(得分:0)

与上面的一个(salathe的答案)相同,除了这个打印行数(现在在php7中)而不是一堆错误消息。

$files = new RecursiveIteratorIterator(new 
RecursiveDirectoryIterator(__DIR__));

$lines = 0;
foreach ($files as $fileinfo) {
    if (!$fileinfo->isFile()) {
        continue;
    }
    $read = $fileinfo->openFile();
    $read->setFlags(SplFileObject::READ_AHEAD);
    $lines += iterator_count($read) - 1; // -1 gives the same number as "wc -l"
}

echo ("Found :$lines");