PHP:获取目录中文件数量的最有效方法

时间:2012-06-30 06:08:52

标签: php

考虑这两个文件夹结构:

Foo/
    Folder1/
        File1.txt
    Folder2/
    Folder3/
    File2.txt

Bar/
    Folder1/
        Folder2/
    Folder3/
    Folder4/

我想知道PHP中最有效的方式告诉我“Foo”文件夹中有两个文件,而“Bar”文件夹中没有文件。请注意,它是递归的。即使“File1.txt”文件在“Foo”文件夹中不是立即,我仍然希望它能够计算。另外,我不关心文件的名称是什么。我只想要文件总数。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:7)

使用RecursiveDirectoryIterator。这是documentation

$rdi = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/home/thrustmaster/Temp', FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY);

foreach ($rdi as $file)
    echo "$file\n";
print iterator_count($rdi);

答案 1 :(得分:2)

您需要一个递归函数来遍历目录结构。无需使用面向对象的解决方案,您就可以真正计算文件数量。

此函数将递归计算目录及其子目录中的文件数。

function countDir($dir, $i = 0) {
    if ($handle = opendir($dir.'/')) {
        while (false !== ($file = readdir($handle))) {

            // Check for hidden files the array[0] on a 
            // string returns the first character
            if ($file[0] != '.') {
                if (is_dir($dir.'/'.$file)) {
                    $i += countDir($dir.$file, $i);
                } else {
                    $i++;
                }
            }
        }
    }

    return $i;
}