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);            //删除空目录
        }
    }
}

?>

 循环读出目录内容,递归读出目录大小

// 读出目录内容
function readDirectory($path){
	$hander = opendir($path);
	while (!!$item = readdir($hander)) {
		if($item!='.'&&$item!='..'&&$item!='images'){
			;
			if(filetype($path.'/'.$item)=='dir'){
				$arr['dir'][] = $item;
			}elseif(filetype($path.'/'.$item)=='file'){
				$arr['file'][] = $item;
			}
		}
	}
	closedir($hander);
	return $arr;
}
// 读出目录大小
function dirSize($path){
	global $filesize;  //全局
	$hander = opendir($path);
	while (!!$item = readdir($hander)) {
		if($item!='.'&&$item!='..'&&$item!='images'){
			if(is_dir($path.'/'.$item)){
				dirSize($path.'/'.$item);
			}elseif(is_file($path.'/'.$item)){
				$filesize += filesize($path.'/'.$item);
			}
		}
	}
	closedir($hander);
	return $filesize;
	// $filesize = 0; 循环显示时先清零
}

下载文件

// 下载文件
function downFile($filename){
	header('content-disposition:attachment;filename='.basename($filename));
	header('content-length:'.filesize($filename));
	readfile($filename);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值