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

高洛峰
Libérer: 2023-03-03 20:26:02
original
1527 Les gens l'ont consulté

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.

Lors du développement du projet, il est inévitable de créer des dossiers sur le serveur, comme le répertoire de téléchargement des images, le répertoire d'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 idées :

1. De haut en bas (parent → enfant)

1. Déterminez d'abord si le répertoire parent est If. il existe, créez-le s'il n'existe pas ;
2. Déterminez si le sous-répertoire secondaire existe, créez-le s'il ne peut pas exister,
3 Dans la deuxième étape, appelez 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 représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. J'espère également que tout le monde soutiendra le site Web PHP 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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!