遍历目录下所有文件夹和文件-------递归删除空目录

时间:2022-02-26 19:05:01

遍历文件夹下所有文件有两种方法

备注p为打印函数相当于print_r(),var_dump()的友好输出

第一种:

//遍历文件夹下所有文件和目录
//opendir():将目录下的文件已资源的形式保存 //readir():读取资源下的文件或目录
$dir = "./file" ; function for_dir( $dir ){ if (! is_dir ( $dir )){ return false ; } $file = opendir ( $dir ); if ( $file ){ while (( $fname = readdir ( $file ))!== false ){ $temp = $dir . '/' . $fname ; if ( is_dir ( $temp )&& $fname != '.' && $fname != '..' ){ p( '目录:' . $temp ); for_dir( $temp ); } else if (! is_dir ( $temp )){ if ( $fname != '.' && $fname != '..' ){ p( '文件:' . $temp ); } } } } } for_dir( $dir );
第二种
//scandir()将当前目录下所有文件与文件夹以数组的形式列出来 $dir=__DIR__;
function second_dir($test){
    $test=scandir($test);
    if(!$test){
        return false;
    }
    foreach($test as $fname){
        $temp=__DIR__.'\\'.$fname;
        if(is_dir($temp)&& $fname!='.'&&$fname!='..'){
            p('目录'.$temp);
           second_dir($temp);
        }else{
            if($fname!='.'&&$fname!='..'){
                p('文件'.$temp);
            }
        }
    }
}
second_dir($dir);

递归删除空目录如果这个会了上面的遍历就是小菜

a是一个目录,目录下可以建立多个文件夹和文件可套无限层,我测试到3层,大神们可以测试提意见谢谢
mkdir()只能删除空目录;
$dir='./a';
function del_dir($dir){
    if(!is_dir($dir)){return false;}
    $test=scandir($dir);
    if(count($test)==2){//等于2的目的是scandir函数将目录以数组形式打开,如果只等于2就证明目录下只有'.'和'..'
        rmdir($dir);
    }
    foreach($test as $fname){
        $temp=$dir.'\\'.$fname;
        $dirname=dirname($temp);
        if(is_dir($temp) && $fname!='.'&& $fname!='..'){
            if(count(scandir($temp))==2){//数组长度等于2证明是空文件夹  if(rmdir($temp)){
                    p($temp);p($dirname);
                    del_dir($dirname);
                }
            }
            del_dir($temp);
        }
    }
}
del_dir($dir);