1、递归获取目录
//递归获取目录
function recdir($dir,$lev=1){
$dirPath = opendir($dir);//打开目录
//读取目录
while(($row = readdir($dirPath)) !== false){
//如果是目录
if($row =="." || $row =='..'){//如果目录是.和 ..则继续
continue;
}
//如果不是.和..├─
echo str_repeat('├─',$lev).$row.'<br>';
//判断是否目录
if(is_dir($dir.'/'.$row)){
recdir($dir.'/'.$row,$lev+1);
}
}
closedir($dirPath);
}
2、递归创建级联目录
/*
创建级联目录
例:./a/b/c/d/e/f
*/
function mk_dir($path){
//如何运气好$path就是一个目录
if(is_dir($path) && file_exists($path)){
return $path;
}
//如何运气一般好,即$path的父级目录存在
if(is_dir(dirname($path))){
return mkdir($path);
}
//如果运气不好父目录也不存在
mk_dir(dirname($path));
return mkdir($path);
}
echo mk_dir('./a/b/c/d/e/f')? 'ok':'fail';
方法二:
function mk_dir($path){
if(is_dir($path)){
return true;
}
return is_dir(dirname($path)) || mk_dir(dirname($path)) ? mkdir($path) : 'false';
}
echo mk_dir('./aa/bb/cc') ? 'ok' : 'fail';
3、递归删除目录和文件
//递归删除文件和目录
function deldir($path){
//如果不是目录
if(!is_dir($path)){
unlink($path);
return true;
}
//如果是目录
$dh = opendir($path);
while(($row = readdir($dh)) !== false){
if($row == '.' || $row == '..'){
continue;
}
//不等于.和.. 判断是否还是目录
if(is_dir($path.'/'.$row)){
deldir($path.'/'.$row);
}else{
//不是目录
unlink($path.'/'.$row);
}
}
closedir($dh);
rmdir($path);
echo '删除了'.$path.'<br>';
}
deldir('./aa') ? 'OK':'false';
4、迭代创建目录
function mk_dir($path){
$arr = array();
//是目录
while(!is_dir($path)){
array_unshift($arr,$path);
$path = dirname($path);
}
//是目录
if(empty($arr)){
return true;
}
foreach($arr as $v){
echo '创建'.$v.'<br>';
mkdir($v);
}
return true;
//print_r($arr);
}
echo '<pre>';
mk_dir('./a/b/c/d');
5、进出栈示例
function mk_dir($path){
$arr = array();
while(!is_dir($path)){
array_push($arr,$path);//进栈
$path = dirname($path);
}
if(empty($arr)){
return true;
}
while(count($arr)){
$p = array_pop($arr);//出栈,出栈顺序,先进后出
echo $p.'出栈<br>';
mkdir($p);
}
return true;
}
echo '<pre>';
mk_dir('./e/b/c/d');