1. 程式人生 > >php 刪除指定文件夾

php 刪除指定文件夾

logs 循環 方法 技術分享 操作 || 資源 函數 asp

php 刪除指定文件夾

1、前言

目標:php刪除一個指定目錄

所使用的的php函數:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(註:其他文件操作函數也可以完成,這裏只列舉了本次使用的函數)

2、相關函數介紹

php文件操作的方法大致相同,已經在上一篇介紹過了,這裏就不在重復介紹,這裏就介紹一個新函數

rmdir

技術分享

詳情參考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp

其他函數請參考上一篇: http://www.cnblogs.com/ImCehnyx/p/7214598.html

3、代碼構成

**
 * [delAllFile description] 刪除指定目錄
 * @param  [type]  $dirName [description] 目錄
 * @param  [type]  $file    [description] 記錄的過程文件
 * @param  integer $type    [description] 第一次默認打開新文件,第二次調用不打開
 * @return [type]           [description]
 */
public function delAllFile($dirName, $file, $type = 1) {
	$re = $this->checkDir($dirName);
	//默認第一次打開文件
	if($type){
		$file = fopen($file, ‘w‘);//打開日誌文件
	}
	if($re){
		$this->delFile($dirName, $file);
	}else{
		fwrite($file,"{$dirName}清理完成\r\n");
	}
}


/**
 * [checkDir description] 檢測文件夾是否為空,為空直接刪除
 * @param  [type] $dirName [description]  文件夾名
 * @return [type]          [description]
 */
private function checkDir($dirName) {
	$a = scandir($dirName);//列出 images 目錄中的文件和目錄:
	//只包含.和..目錄的文件夾為空文件夾
	if(sizeof($a) == 2){
		rmdir($dirName);
		return false;
	}
	return true;
}
/**
 * [delFile description]  上傳文件的方法
 * @param  [type] $dirName [description] 目錄
 * @param  [type] $file    [description] 記錄的文件
 * @return [type]          [description]
 */
private function delFile($dirName, $file) {
	$dh = openDir($dirName);
	while($handle = readdir($dh)){
		if($handle == ‘.‘ || $handle == ‘..‘) {
			continue;
		}
		$resource = $dirName.‘/‘.$handle;
		//判斷是否是文件夾
		if(is_dir($resource)) {
			//判斷文件夾是否為空
			$re = $this->checkDir($dirName);
			if($re){
				$this->delAllFile($resource, $file, 0);
			}else{
				fwrite($file,"{$resource}清理完成\r\n");
				continue;
			}
		}else{
			unlink($resource);
		}
	}
	
	//關掉資源,刪除目錄
	closedir($dh);//關閉目錄資源  
	fwrite($file,"{$dirName}清理完成\r\n");
    rmdir($dirName);//刪除空目錄  	
}

然而,上面的代碼遇到子目錄層級高的時候,就容易出現一個警告,導致目錄無法刪除

技術分享

故對於層級高的子集,需要在最後加上一個循環判斷,來判斷是否可以刪除,來避免這個錯誤

// //關掉資源,刪除目錄
// closedir($dh);//關閉目錄資源  
// fwrite($file,"{$dirName}清理完成\r\n");
//rmdir($dirName);//刪除空目錄  	
	
//每次目錄層級高了就報錯,故加個循環處理
$i = 1;
while($i){
    $re = $this->checkDir($dirName);
    echo "$dirName $i 次<br/><hr/>";
    $i++;
    if(!$re){
        $i = 0;
        closedir($dh);//關閉目錄資源 
        fwrite($file,"{$dirName}清理完成\r\n");     
    }
}

加上這層可以避免無法刪除的情況(有時候刪不掉是權限的問題)

4、結語

刪除一個目錄相對比較簡單,基本步驟為:

1、判斷是否是目錄,是目錄則遞歸調用自己,否則直接刪除文件;

2、判斷目錄是否為空,不為空 rmdir會拋出錯誤;

3、文件權限的問題(window,這個不是什麽問題)

php 刪除指定文件夾