1

すべてのファイルとフォルダーを再帰的にカウントするスクリプトを書いています。2つのアプローチを試しましたが、それぞれが異なる値を返します。スクリプト1:2376スクリプト2:2178

2つのスクリプトは次のとおりです。

$source = 'folder';
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach($files as $file) {
    $result[] = $file.'<br />';
}
echo count($result).'<br />';
    function listFolders($dir) {
    if($dh = opendir($dir)) {
        $files = Array();
        $inner_files = Array();
        while($file = readdir($dh)) {
            if($file != "." && $file != "..") {
                if(is_dir($dir . "/" . $file)) {
                    $inner_files = listFolders($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                } else {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }
        closedir($dh);
        return $files;
    }
}
foreach (listFolders($source) as $key=>$file){
    $result2[] = $file ."<br />";
}
echo count($result2);

スクリプトの1つは正しいですか?私は何が欠けていますか?

4

1 に答える 1

1

RecursiveIteratorを使用した最初の例では、ドットディレクトリもカウントしています。2番目の例では、それらを切り取ります。

これを使って:

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {

    $result[] = $file.'<br />';
}
于 2012-06-22T02:33:37.307 に答える