php 递归创建目录、递归删除非空目录、迭代创建目录
递归创建目录
方法一
 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创建成功
php 递归创建目录、递归删除非空目录、迭代创建目录的更多相关文章
- Python 递归删除非空目录(包括子目录以及文件)
		
Python的OS模块自带rmdir和removedirs函数用于删除目录,但是两者都不能删除非空目录,以下代码定义了一个函数 remove_dir 用于删除非空目录. #作者官网 http://ww ...
 - php rmdir使用递归函数删除非空目录
		
我们大家都知道,php rmdir()函数用于删除空目录,但如果要删除非空目录,我们必须将非空目录中的文件或子目录删除,本文章向大家介绍php如何使用递归函数删除非空目录,需要的朋友可以参考一下.首先 ...
 - Linux删除非空目录的方法
		
rmdir 无法删除非空目录. rm -rf 可以递归,强制,删除目录
 - php rmdir使用递归函数删除非空目录的方法
		
php rmdir()函数 rmdir ― 删除空目录 语法: bool rmdir ( string $dirname [, resource $context ] )尝试删除 dirname 所指 ...
 - php删除非空目录代码实现
		
<?php header("Content-type: text/html; charset=utf-8"); $dir='mydir'; function deldir($ ...
 - Linux删除非空目录
		
Linux下如何删除非空目录 这个问题很basic,不过还是困扰了我一段时间.(这里主要讨论的是命令行模式下)我本来觉得应该使用命令 rmdir但是发现它无法删除非空的目录.后来发现了原来应该使用 ...
 - Linux如何删除非空目录
		
这个问题很basic,不过还是困扰了我一段时间.(这里主要讨论的是命令行模式下) 我本来觉得应该使用命令 rmdir 但是发现它无法删除非空的目录. 后来发现了原来应该使用命令 rm -rf 目录名 ...
 - C语言实现Linux下删除非空目录
		
#include <sys/stat.h> #include <dirent.h> #include <fcntl.h> /** * 递归删除目录(删除该目录以及该 ...
 - Linux下怎么删除非空目录
		
rm -rf 目录名 解释: 1.r意思是删除目录,f意思是force的缩写,强制删除,不提示. 2.如果目录为空,可以用 "rmdir 目录名"删除. 3.如果目录不为空,可以用 ...
 
随机推荐
- Adaboost算法结合Haar-like特征
			
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
 - PHP数组的使用方法小结
			
数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体.数组的每个实体都包含两项:键和值. 一.什么是数组数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体.数组的每个实体 ...
 - 十六进制数'\0x'和'\x'有什么区别?(转)
			
区别不大,都是把数按16进制输出. \0x:当输出的数转换为16进制只有1位时,在前面补0,如 0a,其它情况按照实际情况输出. \x:按照输出数转换为16进制的实际位数输出. 此外,小写x和大写X也 ...
 - GPS基础
			
public class MainActivity extends Activity { private LocationManager manager; private List<String ...
 - Atomic
			
CAS原语 CAS(compare and swap)是一组原语指令,用来实现多线程下的变量同步. public final boolean compareAndSet(int expect, int ...
 - 5分钟上手写ECharts的第一个图表
			
网址:http://echarts.baidu.com/doc/start.html 架构特性 http://echarts.baidu.com/doc/feature.html | 架构 提供商业产 ...
 - COGS731 [网络流24题] 最长递增子序列(最大流)
			
给定正整数序列x1,..., xn (n<=500).(1)计算其最长递增子序列的长度s.(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列.(3)如果允许在取出的序列中多次使用x1和 ...
 - 【随笔】android开发的学习路线
			
第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...
 - Eddy's problem partI
			
Eddy's mistakes[HDU1161] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
 - Quest Central for DataBase 5.0.1,6.1 (软件+注册)
			
找寻了多天,终于找到了,记录下,以后重装用.输入所有组件的licenses后,提示要注册,我选择了Canada,Google了一个地方的PostCode和phone number,填写,注册成功! 软 ...