1. 程式人生 > >php遞迴刪除非空目錄

php遞迴刪除非空目錄

                                      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);            //刪除空目錄
        }
    }
}

?>