php递归创建文件夹的两种方法

1、前言

php中 mkdir 只能创建一个目录(一级)而对于多级目录(创建一级目录时上级目录不存在)就会创建失败。所以在不确定目录级数的时候,我们就需要使用类似一级一级目录的检测,已保证目录创建成功;

递归创建目录的思路:

首先判断 dirname 是否是目录,如果是则尝试创建;

如果失败,则尝试创建上一级目录,使用上一级目录继续 调用本身方法;

2、采用分割目录的方法创建目录

/**
 * [simpleBuilt 通过分割方式创建目录]
 * @param  string $dirname [目录名称]
 * @return [type]          [description]
 */
public function simpleBuilt($dirname) 
{
    //判断是否是目录,如果是尝试创建目录
    if(is_dir($dirname) || @mkdir($dirname, 0700)) {
        echo "{$dirname}创建成功".PHP_EOL;
    }else{
        $dirArr = explode('/', $dirname);
        array_pop($dirArr);//移除最后一项
        $newDirName = implode('/', $dirArr);
        $this->simpleBuilt($newDirName);//重新调用
        if(@mkdir($dirname, 0777)) {
            echo "{$dirname}创建成功".PHP_EOL;
        }
    }
}

 

3、使用dirname 方法进行创建

string dirname ( string $path )
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。(自动去除最后一个子目录)

/**
 * [commonBuilt 基于dirname的方法创建目录]
 * @param  string $dirname [目录名称]
 * @return [type]          [description]
 */
public function commonBuilt($dirname)
{
    if(is_dir($dirname) || @mkdir($dirname, 0777)) {
        echo "{$dirname}创建成功".PHP_EOL;
    }else{
        $this->commonBuilt(dirname($dirname));
        if(@mkdir($dirname, 0777)) {
            echo "{$dirname}创建成功".PHP_EOL;
        }
    }
}
 

4、使用dirname 方法进行创建(简化版)

/**
 * [superBuilt  commomBuilt方法的简写方法]
 * @param  string $dirname [目录名称]
 * @return [type]          [description]
 */
public function superBuilt($dirname)
{
    return is_dir($dirname) or $this->superBuilt(dirname($dirname)) and mkdir($dirname, 0777);
}

pHP中逻辑运算符的优先级顺序:&& > || > and > or,即符号型>字母型,AND型>OR型

posted @ 2017-11-03 23:40 一切随风飘 阅读(...) 评论(...) 编辑 收藏