php 递归创建目录、递归删除非空目录、迭代创建目录

时间:2024-04-15 07:55:20

递归创建目录

方法一

 function mk_dir($path){
if(is_dir($path)){  //参数本身是一个目录
return true;
} if(is_dir(dirname($path))){ //参数的父目录是一个目录,则创建目录
return mkdir($path);
} mk_dir(dirname($path));  
return mkdir($path);
} $path = './a/b/c/d/e';
echo mk_dir($path)?'OK':'Fail';

方法二

 function mk_dir($path){
if(is_dir($path)){
return true;
} return is_dir(dirname($path))||mk_dir(dirname($path))?mkdir($path):false;
} $path = './a/aa';
echo mk_dir($path)?'ok':'fail';

递归删除非空目录:

 function deldir($path){
if(!is_dir($path)){
return '不是目录';
} $dh = opendir($path);
while(($res = readdir($dh)) !== false){
//排除 . 和 ..
if($res == '.' || $res == '..'){
continue;
} if(!is_dir($path.'/'.$res)){ //是文件,直接删除
unlink($path.'/'.$res);
}else{ //是目录,递归调用
deldir($path.'/'.$res);
}
}
closedir($dh);
rmdir($path);
echo "删除".$path.'<br />';
return 'success';
} echo deldir('./aa');

迭代创建目录

方法一

 function mk_dir($path){
$arr = array();
while(!is_dir($path)){
array_unshift($arr, $path); //Array ( [0] => ./a [1] => ./a/b [2] => ./a/b/c [3] => ./a/b/c/d [4] => ./a/b/c/d/e )
$path = dirname($path);
} //print_r($arr); if(empty($arr)){
return true;
} foreach ($arr as $v) {
mkdir($v);
echo '创建'.$v.'成功<br />';
}
} mk_dir('./a/b/c/d/e');

创建./a成功
创建./a/b成功
创建./a/b/c成功
创建./a/b/c/d成功
创建./a/b/c/d/e成功

方法二

function mk_dir($path){
$arr = array();
while(!is_dir($path)){
array_push($arr, $path); //Array ( [0] => ./a/b/c/d/e [1] => ./a/b/c/d [2] => ./a/b/c [3] => ./a/b [4] => ./a )
$path = dirname($path);
} //print_r($arr); if(empty($arr)){
return true;
} while(count($arr)){
$tmp = array_pop($arr);
mkdir($tmp);
echo $tmp.'创建成功<br />';
}
} mk_dir('./a/b/c/d/e');

./a创建成功
./a/b创建成功
./a/b/c创建成功
./a/b/c/d创建成功
./a/b/c/d/e创建成功