phpmkdir函数_php函数mkdir实现递归创建层级⽬录
下⾯是我从⽹上整理的资料,会为⼤家详细介绍php函数的具体⽤法,希望对有这⽅⾯需求的朋友有所帮助。
项⽬开发中免不了要在服务器上创建⽂件夹,⽐如上传图⽚时的⽬录,模板解析时的⽬录等。这不当前⼿下的项⽬就⽤到了这个,于是总结了⼏个循环创建层级⽬录的⽅法。
php默认的mkdir⼀次只能创建⼀层⽬录,⽽要逐层创建各级⽬录的话,⼀般都是先从⽗创建,然后逐层往下创建,但是这样⼿⼯创建的话,有点太过于⿇烦了。
我们写程序是做什么的?不久是为了能⾃动化实现我们需要的功能么,这⾥的⽅法就是为了能够通过程序帮我们⾃动创建完成层级⽬录。
思路有两种:
⼀、从上往下(⽗级→⼦级)
1.先判断 ⽗级 ⽬录是否存在,不存在则创建;
2.判断⼆级⼦⽬录是否存在,不能存在则创建,
3.在第⼆步中以⼦⽬录作为参数递归调⽤函数本⾝。
⼆、从下往上(⼦级→⽗级)
1.先判断最底层⽬录是否存在;
2.判断底层⽬录的上层⽬录是否存在,不存在则以上层⽬录作为参数递归进⾏。
以下是⼏种⽅法:
1:递归创建⽬录,此种⽅法是我⽬前感觉⽐较好的⽅法。
function mkDirs($dir){undefined
if(!is_dir($dir)){undefined
if(!mkDirs(dirname($dir))){undefined
return false;
}
if(!mkdir($dir,0777)){undefined
return false;
}
}
return true;
}
mkDirs('1/2/3/');
2:递归创建级联⽬录,如果第⼀个⽅法不太理解的话,可以结合下⾯这个⽅法理解
function mkDirs1($path){undefined
if(is_dir($path)){//已经是⽬录了就不⽤创建
return true;
}
if(is_dir(dirname($path))){//⽗⽬录已经存在,直接创建
return mkdir($path);
}
mkDirs1(dirname($path));//从⼦⽬录往上创建
return mkdir($path);//因为有⽗⽬录,所以可以创建路径
}
//mkDirs1('1/2/3/');mkdirs方法
3:迭代创建级联⽬录
function makedir($path){undefined
$arr=array();
while(!is_dir($path)){undefined
array_push($arr,$path);//把路径中的各级⽗⽬录压⼊到数组中去,直接有⽗⽬录存在为⽌(即上⾯⼀⾏is_dir判断出来有⽬录,条件为假退出while循环)
$path=dirname($path);//⽗⽬录
}
if(empty($arr)){//arr为空证明上⾯的while循环没有执⾏,即⽬录已经存在
echo $path,'已经存在';
return true;
}
while(count($arr)){undefined
$parentdir=array_pop($arr);//弹出最后⼀个数组单元
mkdir($parentdir);//从⽗⽬录往下创建
}
}
makedir('1/2/3');
PS:有时候程序脚本的⽂件不⼀定在⽹站根⽬录,⽽创建的⽂件需要在根⽬录创建,那我们就需要⽤到⽹站根⽬录路径:
$_SERVER['DOCUMENT_ROOT'];所以我不建议使⽤后⾯的三个⽅法。
以下三种是通过'/'分割路径的⽅法进⾏创建的。
function mk1($dir){undefined
$arr=explode("/",$dir);
$path='';
for($i=0;$i< count($arr);$i++){undefined
$path.=$arr[$i].'/';
if(!is_dir($path)){undefined
mkdir($path,0777);
}
}
}
function mk2($dir){undefined
static $i=0;
$path='';
$arr=explode("/",$dir);
if($i < count($arr)){undefined
$path.=$arr[$i];
mkdir($path,0777,true);
$i++;
mk2($path."/");
}
}
function mkdirs0($path){undefined
$dirs = explode('/',$path);
for ($c=0;$c < count($dirs); $c++) {undefined
$thispath="";
for ($cc=0; $cc <= $c; $cc++) {undefined
$thispath.=$dirs[$cc].'/';
}
if (!is_dir($thispath)) {undefined
mkdir($thispath,0777);
}
}
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。