Home >Backend Development >PHP Tutorial >The php mkdir() function implements the method of recursively creating hierarchical directories

The php mkdir() function implements the method of recursively creating hierarchical directories

怪我咯
怪我咯Original
2017-07-11 14:23:552295browse

In project development, it is inevitable to create folders on the server, such as the directory when uploading images, the directory when parsing templates, etc. This is not used in my current project, so I summarized several methods of creating hierarchical directories in a loop.

php The default mkdir can only create one level of directories at a time. If you want to create directories at all levels layer by layer, you usually create them from the parent first, and then create them layer by layer. However, you can create them manually in this way. If so, it would be a bit too troublesome.

What do we do when we write programs? Is it to be able to automatically realize the functions we need soon? The method here is to help us automatically create and complete the hierarchical directory through the program.

There are two ways of thinking:

1. From top to bottom (parent → child)

1. First determine whether the parent directory exists, and create it if it does not exist;
2. Determine whether the second-level subdirectory exists, and create it if it cannot exist.
3. In the second step, call the function itself recursively with the subdirectory as a parameter. .

2. From bottom to top (child → parent)

1. First determine whether the bottom directory exists;
2. Determine whether the upper directory of the bottom directory exists If it exists, if it does not exist, the upper directory will be used as a parameter to recurse.

The following are several methods:

1: Create a directory recursively. This method is the better method I currently feel.

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: Create cascading directories recursively. If you don’t understand the first method, you can combine it with the following method to understand

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: Create cascading directories iteratively

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: Sometimes the files of the program script are not necessarily in the root directory of the website, but the created files need to be created in the root directory, then we need to use the website root directory path: $_SERVER['DOCUMENT_ROOT '];So I don't recommend using the latter three methods.

The following three methods are created by splitting paths with '/'.

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

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

The above is the detailed content of The php mkdir() function implements the method of recursively creating hierarchical directories. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn