php遞迴刪除非空目錄
阿新 • • 發佈:2018-11-20
php遞迴刪除非空目錄
第一種:
<?php $dir = dirname(__FILE__).'/test'; //要刪除的非空目錄 delFile($dir); //執行刪除函式 function delFile($dir){ $handle = @opendir($dir); // 如果整個目錄為空直接刪除 if(is_empty_dir($dir)){ @rmdir($dir); }else{ while(!!$file = @readdir($handle)){ if($file!='.' && $file!='..'){ // 如果是目錄判斷是否為空 為空則直接刪除 if(filetype($dir.'/'.$file)=='dir'){ if(is_empty_dir($dir.'/'.$file)){ @rmdir($dir.'/'.$file); // 刪除目錄後判斷父目錄是否為空 為空則刪除 if(is_empty_dir($dir)){ @rmdir($dir); } // 如果目錄不為空則遞迴 刪除檔案 }else{ delFile($dir.'/'.$file); } // 如果是檔案 直接刪除 }else{ unlink($dir.'/'.$file); // 刪除檔案後判斷父目錄是否為空 為空則刪除 if(is_empty_dir($dir)){ @rmdir($dir); } } } } } } //判斷目錄是否為空,true為空,false為不空 function is_empty_dir($fp){ $H = @ opendir($fp); $i = 0; while($_file = @readdir($H)){ // 如果是空的 則只有'.'和'..'兩個目錄 $i++; //$i>2 說明有其他目錄 則不為空 } @closedir($H); if($i > 2){ return false; }else{ return true; } } ?>
第二種:
<?php $dir = dirname(__FILE__).'/test'; //要刪除的非空目錄 delDir($dir); //呼叫delDir函式 function delDir($dir){ if(file_exists($dir)){ //判斷目錄是否存在 if($dir_handle = @opendir($dir)){ //開啟目錄返回目錄資源,並判斷是否成功 while($filename = readdir($dir_handle)){ //遍歷目錄,讀出目錄中的檔案或目錄 if($filename!='.' && $filename!='..'){ //一定要排除兩個特殊的目錄 $subFile = $dir."/".$filename; //將目錄下的檔案與當前目錄相連 if(is_dir($subFile)){ //如果是目錄 delDir($subFile); //遞迴呼叫自己刪除子檔案 } if(is_file($subFile)){ //如果是檔案條件 unlink($subFile); //直接刪除這個檔案 } } } closedir($dir_handle); //關閉目錄資源 rmdir($dir); //刪除空目錄 } } } ?>