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

怪我咯
Libérer: 2023-03-13 15:00:01
original
2295 Les gens l'ont consulté

Lors du développement du projet, il est inévitable de créer des dossiers sur le serveur, comme le répertoire lors du téléchargement des 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 en couche. par couche. Cependant, vous pouvez les créer manuellement de cette manière. Si c'est le cas, ce serait 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 le répertoire hiérarchique via le programme.

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/');
Copier après la connexion

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/');
Copier après la connexion

3 : Créer de manière itérative des répertoires en cascade. répertoires

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');
Copier après la connexion

PS : Parfois, les fichiers du script du programme ne sont 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 site Web chemin du répertoire racine : $_SERVER['DOCUMENT_ROOT'] ; Je ne recommande donc 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);
    }
  }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal