考虑这两个文件夹结构:
Foo/
Folder1/
File1.txt
Folder2/
Folder3/
File2.txt
Bar/
Folder1/
Folder2/
Folder3/
Folder4/
我想知道PHP中最有效的方式告诉我“Foo”文件夹中有两个文件,而“Bar”文件夹中没有文件。请注意,它是递归的。即使“File1.txt”文件在“Foo”文件夹中不是立即,我仍然希望它能够计算。另外,我不关心文件的名称是什么。我只想要文件总数。
任何帮助将不胜感激。谢谢!
答案 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;
}