php遞歸建立文件夾的兩種方法

一、前言

php中 mkdir 只能建立一個目錄(一級)而對於多級目錄(建立一級目錄時上級目錄不存在)就會建立失敗。因此在不肯定目錄級數的時候,咱們就須要使用相似一級一級目錄的檢測,已保證目錄建立成功;php

遞歸建立目錄的思路:函數

首先判斷 dirname 是不是目錄,若是是則嘗試建立;ui

若是失敗,則嘗試建立上一級目錄,使用上一級目錄繼續 調用自己方法;this

二、採用分割目錄的方法建立目錄

/**
 * [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;
        }
    }
}

 

三、使用dirname 方法進行建立

string dirname ( string $path )
給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名。(自動去除最後一個子目錄)spa

/**
 * [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;
        }
    }
}
 

四、使用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型code

相關文章
相關標籤/搜索