php使用mkdir创建多级目录的二种实现方法

时间:2016-09-28
php mkdir函数可以创建目录,而且在php5版本及以上可以直接使用该函数创建多级目录,但在php5以下版本无法直接使用mkdir创建多级目录,需要自己写函数来实现,本文章向大家介绍php使用mkdir创建多级目录的二种实现方法,需要的朋友可以参考一下。

方法一:mkdir创建多级目录

mkdir($path,0777,true);

PHP5对创建目录函数 mkdir 增加了一个新的参数 recursive ,通过设置 recursive 为 true 可以实现递归创建目录的目的,但是这个在PHP4环境下是行不通的。

path 必需。规定要创建的目录的名称。 
mode 必需。规定权限。默认是 0777。 
recursive 必需。规定是否设置递归模式。 

其实思路也很简单,例如,如果在当前目录下创建一个div/css/layout的目录,1.先判断 div目录是否存在,不存在则创建;2.判断子目录 div/css 是否存在,不能存在则创建,3.在第二步中以子目录作为参数递归调用函数本身。也可以按相反顺序来,1.先判断最底层目录div/css/layout是否存在;2.判断div/css/layout的上层目录div/css是否存在,不存在则以div/css作为参数递归进行。

具体代码如下:

<?php
header("Content-type:text/html;charset=utf-8");
//要创建的多级目录
$path="div/css/layout";
//判断目录存在否,存在给出提示,不存在则创建目录
if (is_dir($path)){  
   echo "对不起!目录 " . $path . " 已经存在!";
}else{
   //第三个参数是“true”表示能创建多级目录,iconv防止中文目录乱码
   $res=mkdir(iconv("UTF-8", "GBK", $path),0777,true); 
   if ($res){
      echo "目录 $path 创建成功";
   }else{
      echo "目录 $path 创建失败";
   }
}
?>

方法二:自己写一个函数来实现php创建多级目录

function mkdirs($dir,$mode=0777){
	if(is_dir($dir)||@mkdir($dir,$mode)){
		return true;
	}
	if(!mkdirs(dirname($dir),$mode)){
		return false;
	}
	return @mkdir($dir,$mode);
}

解释: 简单说一下mkdir()与mkdirs()的区别,以及is_dirdirname()

mkdir() 只能在已经存在的目录中创建创建文件夹(即父级必须有才行)。 
mkdirs() 可以在不存在的目录中创建文件夹。诸如:a\\b,既可以创建多级目录。

dirname()是返回路径中的目录部分。

is_dir()用于判断给出的文件名是否是一个有效的目录

大致流程为:

(1) 先用is_dir判断是否已是一个文件夹,如果是则返回TRUE。如没有(或者不是文件夹),则试着创建它,当然有可以父级不存在,那mkdir直接就创不成功,但也为不报错,所以就用@来抑止报非致命错误。

(2)如果传参数都不满足条件,那么就进入第二个if语句,先是取得路径中的目录部分,当然有可能是不存在的多级父级,所以用了mkdirs()来先创建父级,如果成功(不成功返回FALSE),那么再用mkdir来创建最终的目录了。