3

次の 2 つのフォルダー構造を検討してください。

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

Bar/
    Folder1/
        Folder2/
    Folder3/
    Folder4/

「Foo」フォルダーには2つのファイルがあり、「Bar」フォルダーにはファイルが含まれていないことをPHPで最も効率的に伝える方法を知りたいです。再帰的であることに注意してください。「File1.txt」ファイルが「Foo」フォルダーのすぐ内側にあるわけではありませんが、それでもカウントしたいのです。また、ファイルの名前が何であるかは気にしません。ファイルの総数が欲しいだけです。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

7

を使用しRecursiveDirectoryIteratorます。これがドキュメントです。

$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);
于 2012-06-30T06:14:00.687 に答える
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;
}
于 2012-06-30T06:23:01.607 に答える