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/');
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. 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');
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].'/'; if(!is_dir($path)){ mkdir($path,0777); } } } function mk2($dir){ static $i=0; $path=''; $arr=explode("/",$dir); if($i < count($arr)){ $path.=$arr[$i]; mkdir($path,0777,true); $i++; mk2($path."/"); } } function mkdirs0($path){ $dirs = explode('/',$path); for ($c=0;$c < count($dirs); $c++) { $thispath=""; for ($cc=0; $cc <= $c; $cc++) { $thispath.=$dirs[$cc].'/'; } if (!is_dir($thispath)) { mkdir($thispath,0777); } } }
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!