您的位置:首页 > 编程语言 > PHP开发

PHP文件目录简单操作

2014-04-16 14:35 441 查看
<?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 "备份成功";}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: