PHP文件目录简单操作

<?php

final class dir{
	//转换为标准目录结构
	static function dir_path($dirname){
		$dirname=str_ireplace('\\','/',$dirname);//将\转换为/
		return substr($dirname,-1)=='/'?$dirname:$dirname.'/';//目录最后带/
	}
	
	//获得稳健扩展名,strrchr() 查找指定字符在字符串中的最后一次出现 并返回从这个位置开始以后的字串
	static function get_ext($filename){
		return substr(strrchr($filename,"."),1);
	}
	
	//获的目录下的子目录和文件,包含子目录下的文件。$dirname目录名,$exts扩展名,$list文件列表
	static function tree($dirname,$exts='',$son=0,$list=array()){
		$dirname=self::dir_path($dirname);//获得目录
		if(is_array($exts)){
			$exts=implode("|",$exts);//将多个扩展名用|分隔
		}
		static $id=0;
		foreach(glob($dirname."*") as $v){//glob — 寻找与模式匹配的文件路径 
			//echo $v."<br/>";
			$id++;
			if(!$exts || preg_match("/\.($exts)/i",$v)){
				//echo "111";
				$list[$id]['name']=basename($v);//basename — 返回路径中的文件名部分 
				$list[$id]['path']=realpath($v);//获得文件绝对路径
				$list[$id]['type']=filetype($v);//取得文件类型 
				$list[$id]['ctime']=filectime($v);//取得文件的 inode 修改时间 
				$list[$id]['atime']=fileatime($v);//取得文件的上次访问时间 
				$list[$id]['filesize']=filesize($v);//获得文件大小
				$list[$id]['iswrite']=is_writeable($v);//是否可写
				$list[$id]['isread']=is_readable($v);//是否可读
			}
			if($son){
				if(is_dir($v)){
					$list=self::tree($v,$exts,$son,$list);
				}
			}
		}
		return $list;
	}
		
	//只获得目录结构,$dirname目录名,$son是否遍历子目录,$list存储得到的目录
	static function tree_dir($dirname,$pid=0,$son=0,$list=array()){
		$dirname=self::dir_path($dirname);
		static $id=0;
		foreach(glob($dirname."*") as $v){
			if(is_dir($v)){
				$id++;
				$list[$id]['id']=$id;
				$list[$id]['pid']=$pid;
				$list[$id]['name']=basename($v);
				$list[$id]['path']=realpath($v);
				if($son){
					$list=self::tree_dir($v,$id,$son,$list);
				}
			}
		}
		return $list;
	}
	
	//删除目录
	static function del($dirname){
		$dirPath=self::dir_path($dirname);
		if(!is_dir($dirPath)){
			return false;
		}
		foreach(glob($dirPath."*") as $v){
			is_dir($v)?self::del($v):unlink($v);//unlink()删除指定目录下的文件 ,要先删除文件才能删除目录
		}
		return rmdir($dirPath);
	}
	
	//支持层级的目录结构创建
	static function create($dirname,$auth="0777"){
		$dirPath=self::dir_path($dirname);
		if(is_dir($dirPath)){
			return true;
		}
		$dirArr=explode("/",$dirPath);//将目录逐级拆分放到数组中
		//var_dump($dirArr);
		$dir='';
		foreach($dirArr as $v){
			$dir.=$v.'/';
			//echo $dir."<br/>";
			if(is_dir($dir)){
				continue;//如果目录存在则跳过循环
			}
			mkdir($dir,$auth);//创建目录
		}
		return is_dir($dirPath);
	}
	
	//将指定目录下的所有内容复制到另一个目录
	static function copy_dir($oldDir,$newDir){
		$oldDir=self::dir_path($oldDir);
		$newDir=self::dir_path($newDir);
		if(!is_dir($oldDir)){
			error("复制失败:".$oldDir."目录不存在");
		}
		if(!is_dir($newDir)){
			self::create($newDir);//如果目录不存在则创建
		}
		foreach(glob($oldDir."*") as $v){
			$toFile=$newDir.basename($v);//得到oldDir下的当前目录名或者文件名
			//echo $v.'------'.$toFile."<br/>";
			if(is_file($toFile)){
				continue;//已有的文件不复制
			}
			if(is_dir($v)){//如果toFile还是一个目录,则递归到他的子目录
				self::copy_dir($v,$toFile);//将子目录也复制
			}else{
				copy($v,$toFile);//复制文件内容
				chmod($toFile,"0777");
			}
		}
		return true;
	}
}

测试

	//echo dir::get_ext("wenhaolog.php");//获得文件扩展名
	//print_r(dir::tree("d:/www/myblog/"));//输出d:/www/myblog/目录下的所有目录和文件名。

	//多的子目录或目录下的文件
	//$list=dir::tree("d:/www/myblog/blog/","php");//显示指定扩展名的文件,没指定扩展名则也会显示目录
	//var_dump($list);						
	//$list=dir::tree("d:/www/myblog/blog/","",1);//获得指定目录下的所有子目录和所有文件(包含子目录下的文件)
	//var_dump($list);
	//$list=dir::tree("d:/www/myblog/blog/","php|html",1);//获得指定目录下(包含子目录下)的所有php文件和html文件
	//var_dump($list);
			
			
	//获得子目录
	//$list=dir::tree_dir("d:/www/myblog/blog/");//获得指定目录下的当前子目录
	//var_dump($list);
			
			
			
	//删除目录
	//$s=dir::del("d:/www/myblog/test");
	//var_dump($s);
			
	//目录创建
	//dir::create("d:/www/myblog/aaa/aaaaa/aaaaaa/");
			
			
	//复制目录内容
	$copy=dir::copy_dir("d:/www/myblog/blog","d:/www/myblog/backup");
	if($copy){
		echo "备份成功";
	}
	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值