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_dir和dirname():
mkdir() 只能在已经存在的目录中创建创建文件夹(即父级必须有才行)。
mkdirs() 可以在不存在的目录中创建文件夹。诸如:a\\b,既可以创建多级目录。
dirname()是返回路径中的目录部分。
is_dir()用于判断给出的文件名是否是一个有效的目录
大致流程为:
(1) 先用is_dir判断是否已是一个文件夹,如果是则返回TRUE。如没有(或者不是文件夹),则试着创建它,当然有可以父级不存在,那mkdir直接就创不成功,但也为不报错,所以就用@来抑止报非致命错误。
(2)如果传参数都不满足条件,那么就进入第二个if语句,先是取得路径中的目录部分,当然有可能是不存在的多级父级,所以用了mkdirs()来先创建父级,如果成功(不成功返回FALSE),那么再用mkdir来创建最终的目录了。
来源:码农教程