遍歷目錄下所有文件夾和文件-------遞歸刪除空目錄

遍歷文件夾下所有文件有兩種方法

備註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);











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章