0

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

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

谢谢。!

4

5 回答 5

1

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

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

$total = system("find $dir_path -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'");
于 2012-08-10T03:31:43.077 回答
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);

?>
于 2012-08-10T03:31:17.693 回答
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;
}
于 2012-08-10T03:37:51.107 回答
0

计算行数的一个非常基本的示例可能如下所示,它给出的数字与xdazz 的答案相同。

<?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);

也可以看看

于 2012-08-10T18:52:24.660 回答
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");
于 2017-12-01T01:51:06.627 回答