Php 对目录中的文件和子文件夹进行计数

Php 对目录中的文件和子文件夹进行计数,php,directory,counting,Php,Directory,Counting,大家好,我需要一个脚本,可以计算所有文件,文件夹及其子文件夹等 因此,我尝试了两个脚本,但每个脚本都返回不同的值。例子: 脚本1:2376 脚本2:2178 以下是我的两个脚本: $source = 'folder'; $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach($files as $f

大家好,我需要一个脚本,可以计算所有文件,文件夹及其子文件夹等

因此,我尝试了两个脚本,但每个脚本都返回不同的值。例子: 脚本1:2376 脚本2:2178

以下是我的两个脚本:

$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);
$source='folder';
$files=new recursiveiterator(new recursivedirectoryinterator($source),recursiveiterator::SELF_FIRST);
foreach($files作为$file){
$result[]=$file.
; } 回声计数($result)。“
”; 函数列表文件夹($dir){ 如果($dh=opendir($dir)){ $files=Array(); $internal_files=Array(); 而($file=readdir($dh)){ 如果($file!=“&&&$file!=”){ if(is_dir($dir./“$file)){ $internal_files=列表文件夹($dir./“$file); 如果(is_array($inner_files))$files=array_merge($files,$inner_files); }否则{ 数组_push($files,$dir./“$file); } } } closedir($dh); 返回$files; } } foreach(listFolders($source)作为$key=>$file){ $result2[]=$file.“
”; } 回声计数($result2);
那么,如何计算包含7000-10000个文件和子文件夹的文件夹

致以最良好的祝愿,
乔治

如果您的第一个示例使用RecursiveIterator,那么您也在计算点目录。在第二个示例中,您将它们删掉

使用以下命令:

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

    $result[] = $file.'<br />';
}
$files=new recursive迭代器(new recursivedirectoryinterator($source,FilesystemIterator::SKIP_DOTS),recursiveiterator::CHILD_FIRST);
foreach($files作为$file){
$result[]=$file.
; }
我得到了这样的信息:“致命错误:调用/home/gtsvetan/public_html/files.php第10行中未定义的方法SplFileInfo::isDot()”我的php版本是:5.2.17你不应该使用两年前已经过时的php版本。实际上,5.2分支中没有进行bug修复,甚至没有重要的安全修复。更新的代码,请查看。使用FileSystemEmitter::SKIP_DOTS常量代替isDot()方法,isDot()方法不是递归迭代器的有效方法。请修复此问题,错误是我的。。。但是当我尝试使用isDot()时,结果是一样的:第一个脚本->8133/第二个脚本->7422是的,这是不一致的,因为RecursiveIteratorIterator将只包含叶,而不包含父级和子级。您可以在recursiveiterator(新的recursivedirectoryinterator($source),FilesystemIterator::SKIP_)之后首先添加recursiveiterator::CHILD_;