Maison >développement back-end >tutoriel php >La fonction PHP mkdir implémente la méthode de création récursive de répertoires hiérarchiques

La fonction PHP mkdir implémente la méthode de création récursive de répertoires hiérarchiques

墨辰丷
墨辰丷original
2018-05-31 10:10:101896parcourir

Lorsque nous souhaitons ajouter des répertoires multi-niveaux à notre site, nous pouvons utiliser la fonction php mkdir() pour réaliser cette fonction. Il a une certaine valeur de référence et les amis intéressés peuvent s'y référer.

Ce qui suit sont les informations que j'ai compilées sur Internet. Je vais présenter en détail l'utilisation spécifique de la fonction php mkdir. J'espère que cela sera utile aux amis qui ont des besoins à cet égard.

Dans le développement de projets, il est inévitable de créer des dossiers sur le serveur, comme le répertoire lors du téléchargement d'images, le répertoire lors de l'analyse des modèles, etc. Ceci n'est pas utilisé dans mon projet actuel, j'ai donc résumé plusieurs méthodes de création de répertoires hiérarchiques en boucle.

Le mkdir par défaut de PHP ne peut créer qu'un seul niveau de répertoires à la fois. Si vous souhaitez créer des répertoires à tous les niveaux couche par couche, vous les créez généralement d'abord à partir du parent, puis vous les créez couche par couche. Cependant, si vous le créez manuellement de cette manière, c'est un peu trop compliqué.

Que faisons-nous lorsque nous écrivons des programmes ? Est-ce pour pouvoir bientôt réaliser automatiquement les fonctions dont nous avons besoin ? La méthode ici consiste à nous aider à créer et à compléter automatiquement des répertoires hiérarchiques via des programmes.

Il y a deux façons de penser :

1. De haut en bas (parent → enfant)

1. Déterminez d'abord si le répertoire parent existe et créez-le s'il n'existe pas ;
2. Déterminez si le sous-répertoire de deuxième niveau existe et créez-le s'il ne peut pas exister
3. la fonction elle-même de manière récursive avec le sous-répertoire comme paramètre.

2. De bas en haut (enfant → parent)

1. Déterminez d'abord si le répertoire inférieur existe
2. existe S'il existe, s'il n'existe pas, le répertoire supérieur sera utilisé comme paramètre pour récurer.

Voici plusieurs méthodes :

1 : Créer un répertoire de manière récursive. Cette méthode est la meilleure méthode que je ressens actuellement.

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 : Créer récursivement des répertoires en cascade Si vous ne comprenez pas la première méthode, vous pouvez la combiner avec la méthode suivante pour. comprendre

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 : Créer de manière itérative des répertoires en cascade

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 : Oui Parfois, les fichiers de script du programme ne se trouvent pas nécessairement dans le répertoire racine du site Web, et les fichiers créés doivent être créés dans le répertoire racine, nous devons alors utiliser le chemin du répertoire racine du site Web : $_SERVER['DOCUMENT_ROOT'] ; donc je ne recommande pas d'utiliser les trois dernières méthodes.

Les trois suivants sont créés en divisant le chemin par '/'.

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);
    }
  }
}

Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

Comment télécharger des fichiers dans TP5 en PHP

phpComment convertir un tableau associatif bidimensionnel en chaîne

Explication détaillée de la méthode d'analyse des chevaux de Troie de fichiers Webshell en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn