php 递归创建目录

递归创建目录
要求:自己写函数

完成一次创建    ./a/b/c/d/e 目录

function createdir($path) {
    // 判断传过来的$path是否已是目录,若是,则直接返回true
    if(is_dir($path)) {
        return true;
    }
    
    // 走到这步,说明传过来的$path不是目录
    // 判断其上级是否为目录,是,则直接创建$path目录
    if(is_dir(dirname($path))) {
        return mkdir($path);
    }

    // 走到这说明其上级目录也不是目录,则继续判断其上上...级目录
    createdir(dirname($path));
    
    // 走到这步,说明上级目录已创建成功,则直接接着创建当前目录,并把创建的结果返回
    return mkdir($path);
}

echo createdir('./a/b/c/d/e')?'ok':'false';
 

巧妙运用三元运算符来创建联级目录:

function mk_dir($path) {
    // 如果目录已经存在,直接返回
    if(is_dir($path)) {
        return true;
    }

    // 如果目录不存在,创建
    //想要创建$path目录,要么$path的父目录dirname($path)存在,要么你就帮我创建父目录
    //终止条件:找到了父目录,不去创建父目录了
    return is_dir(dirname($path))||mk_dir(dirname($path))?mkdir($path):false;
}

echo mk_dir('./aa/bb/cc')?'ok':'false';
这里面需要注意的是,如果不用return时,直接 is_dir(dirname($path))||mk_dir(dirname($path))?mkdir($path):false;那么最终打印的只有./aa目录,为什么呢?原因在于但程序知道到./aa这步时,来到这里就会先判断is_dir(dirname($path)),这时的结果为真,那么则会执行?号后面的mkdir($path),也就是创建aa目录,但是!创建完后并没有return,因此上一级递归调用的mk_dir()函数并没有返回值,没值就会认为是空,false,为false的话,递归的上一级就不会调用mkdir($path),因此最终创建的就只有aa目录!


通过上面的描述,如果我们想在没有return的情况下也能创建联级目录的话,也可以,只需要把 is_dir(dirname($path))||mk_dir(dirname($path))?mkdir($path):false;

这段代码变一下: 

mk_dir(dirname($path))||is_dir(dirname($path))?mkdir($path):false;

这样的话也能成功创建联级目录!



其实,php5的mkdir函数,自身就能够创建级联目录

mkdir()中的第三个bool参数表示是否创建级联目录:

echo mkdir('./aaa/bbb/ccc',0777,true)?'ok':'false';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值