当前位置:  开发笔记 > 编程语言 > 正文

使用PHP递归计数文件

如何解决《使用PHP递归计数文件》经验,为你挑选了2个好方法。

关于newb和我的Google-Fu的简单问题让我失望.使用PHP,如何计算给定目录中的文件数,包括任何子目录(以及它们可能具有的任何子目录等)?例如,如果目录结构如下所示:

/Dir_A/  
/Dir_A/File1.blah  
/Dir_A/Dir_B/  
/Dir_A/Dir_B/File2.blah  
/Dir_A/Dir_B/File3.blah  
/Dir_A/Dir_B/Dir_C/  
/Dir_A/Dir_B/Dir_C/File4.blah  
/Dir_A/Dir_D/  
/Dir_A/Dir_D/File5.blah

该脚本应返回"5"表示"./Dir_A".

我拼凑了以下但是它没有完全回答正确的答案,我不确定为什么:

function getFilecount( $path = '.', $filecount = 0, $total = 0 ){  
    $ignore = array( 'cgi-bin', '.', '..', '.DS_Store' );  
    $dh = @opendir( $path );  
    while( false !== ( $file = readdir( $dh ) ) ){  
        if( !in_array( $file, $ignore ) ){  
            if( is_dir( "$path/$file" ) ){  
                $filecount = count(glob( "$path/$file/" . "*"));  
                $total += $filecount;  
                echo $filecount; /* debugging */
                echo " $total"; /* debugging */
                echo " $path/$file
"; /* debugging */ getFilecount( "$path/$file", $filecount, $total); } } } return $total; }

我非常感谢任何帮助.



1> Paolo Bergan..:

这应该做的伎俩:

function getFileCount($path) {
    $size = 0;
    $ignore = array('.','..','cgi-bin','.DS_Store');
    $files = scandir($path);
    foreach($files as $t) {
        if(in_array($t, $ignore)) continue;
        if (is_dir(rtrim($path, '/') . '/' . $t)) {
            $size += getFileCount(rtrim($path, '/') . '/' . $t);
        } else {
            $size++;
        }   
    }
    return $size;
}



2> Andrew Clark..:

使用SPL,然后查看是否仍然出现错误.

RecursiveDirectoryIterator

用法示例:

 $object){
    echo "$name\n";
}

?>

这将打印$ path下的所有文件和目录的列表(包括$ path ifself).如果要省略目录,请删除RecursiveIteratorIterator :: SELF_FIRST部分.

然后使用isDir()

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有