Home  >  Article  >  Backend Development  >  PHP function mkdir implements the method of recursively creating hierarchical directories

PHP function mkdir implements the method of recursively creating hierarchical directories

墨辰丷
墨辰丷Original
2018-05-31 10:10:101756browse

When we want to add multi-level directories to our site, we can use the php function mkdir() to achieve this function. It has certain reference value, and interested friends can refer to it.

The following is the information I compiled from the Internet. I will introduce the specific usage of the PHP function mkdir in detail. I hope it will be helpful to friends who have needs in this regard.

During 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's 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, if you create it manually in this way, it is a bit It's too much trouble.

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 secondary 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: Recursively create cascading directories. 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: Iteratively create cascading directories

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 It must be in the root directory of the website, and 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 do not recommend using the following 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 entire content of this article, I hope it will be helpful to everyone's study.


Related recommendations:

TP5 method of uploading files in PHP

phpMethod to convert a two-dimensional associative array into a string

Detailed explanation of the method of webshell scanning file Trojans in PHP

The above is the detailed content of PHP function mkdir 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