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