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