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

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

备注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层,大神们可以测试提意见谢谢
rmdir()只能删除空目录;
$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);











你可能感兴趣的:(文件夹操作)