php函数mkdir实现递归创建层级目录


Posted in PHP onOctober 27, 2016

下面是我从网上整理的资料,会为大家详细介绍php函数mkdir的具体用法,希望对有这方面需求的朋友有所帮助。

项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法。

php默认的mkdir一次只能创建一层目录,而要逐层创建各级目录的话,一般都是先从父创建,然后逐层往下创建,但是这样手工创建的话,有点太过于麻烦了。

我们写程序是做什么的?不久是为了能自动化实现我们需要的功能么,这里的方法就是为了能够通过程序帮我们自动创建完成层级目录。

思路有两种:

一、从上往下(父级→子级)

1.先判断 父级 目录是否存在,不存在则创建;
2.判断二级子目录是否存在,不能存在则创建,
3.在第二步中以子目录作为参数递归调用函数本身。

二、从下往上(子级→父级)

1.先判断最底层目录是否存在;
2.判断底层目录的上层目录是否存在,不存在则以上层目录作为参数递归进行。

以下是几种方法:

1:递归创建目录,此种方法是我目前感觉比较好的方法。

function mkDirs($dir){
  if(!is_dir($dir)){
    if(!mkDirs(dirname($dir))){
      return false;
    }
    if(!mkdir($dir,0777)){
      return false;
    }
  }
  return true;
}
mkDirs('1/2/3/');

2:递归创建级联目录,如果第一个方法不太理解的话,可以结合下面这个方法理解

function mkDirs1($path){
  if(is_dir($path)){//已经是目录了就不用创建
    return true;
  }
  if(is_dir(dirname($path))){//父目录已经存在,直接创建
    return mkdir($path);
  }
  mkDirs1(dirname($path));//从子目录往上创建
  return mkdir($path);//因为有父目录,所以可以创建路径
}
//mkDirs1('1/2/3/');

3:迭代创建级联目录

function makedir($path){
  $arr=array();
  while(!is_dir($path)){
    array_push($arr,$path);//把路径中的各级父目录压入到数组中去,直接有父目录存在为止(即上面一行is_dir判断出来有目录,条件为假退出while循环)
    $path=dirname($path);//父目录
  }
  if(empty($arr)){//arr为空证明上面的while循环没有执行,即目录已经存在
    echo $path,'已经存在';
    return true;
  }
  while(count($arr)){
    $parentdir=array_pop($arr);//弹出最后一个数组单元
    mkdir($parentdir);//从父目录往下创建
  }
}
makedir('1/2/3');

PS:有时候程序脚本的文件不一定在网站根目录,而创建的文件需要在根目录创建,那我们就需要用到网站根目录路径:$_SERVER['DOCUMENT_ROOT'];所以我不建议使用后面的三个方法。

以下三种是通过'/'分割路径的方法进行创建的。

function mk1($dir){
  $arr=explode("/",$dir);
  $path='';
  for($i=0;$i< count($arr);$i++){
    $path.=$arr[$i].'/';
    if(!is_dir($path)){
      mkdir($path,0777);
    }
  }
}

function mk2($dir){
  static $i=0;
  $path='';
  $arr=explode("/",$dir);
  if($i < count($arr)){
    $path.=$arr[$i];
    mkdir($path,0777,true);
    $i++;
    mk2($path."/");
  }
}
function mkdirs0($path){
  $dirs = explode('/',$path);
  for ($c=0;$c < count($dirs); $c++) {
    $thispath="";
    for ($cc=0; $cc <= $c; $cc++) {
      $thispath.=$dirs[$cc].'/';
    }
    if (!is_dir($thispath)) {
      mkdir($thispath,0777);
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
利用php生成验证码
Feb 23 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 08 PHP
PHP实现递归目录的5种方法
Oct 27 #PHP
PHP读取大文件的几种方法介绍
Oct 27 #PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 #PHP
PHP中的密码加密的解决方案总结
Oct 26 #PHP
php 解析xml 的四种方法详细介绍
Oct 26 #PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 #PHP
php 生成签名及验证签名详解
Oct 26 #PHP
You might like
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
Promise扫盲贴
2019/06/24 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
替换python字典中的key值方法
2018/07/06 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
python3下pygame如何实现显示中文
2020/01/11 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
合作经营协议书
2014/04/17 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
环保建议书600字
2014/05/14 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python