Maison > Article > développement back-end > PHP utilise des fonctions récursives pour créer des répertoires multi-niveaux
Cet article présente principalement l'utilisation de fonctions récursives en PHP pour créer des répertoires multi-niveaux. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Les détails sont les suivants :
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。 echo $dir."创建成功<br>"; //输出创建成功的目录 }else{ $dirArr=explode('/',$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组 array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来, $newDir=implode('/',$dirArr); //重新组合成一个文件夹字符串 Directory($newDir); //试图创建父目录 if(@mkdir($dir,0777)){ echo $dir."创建成功<br>"; } //再次试图创建子目录,成功输出目录名 } } Directory("A/B/C/D/E/F");
Le résultat de sortie est tel qu'indiqué dans la figure :
Mais cela peut être vu que c'est trop compliqué à écrire, en regardant les fonctions de fichier dans le manuel, j'ai vu une fonction dirname() , son prototype est le suivant :
string dirname ( string $path )
Étant donné une chaîne contenant le chemin complet d'un fichier, cette fonction renvoie le nom du répertoire après avoir supprimé le nom du fichier.
Sous Windows, la barre oblique (/) et la barre oblique inverse () peuvent être utilisées comme séparateurs de répertoire. Dans d'autres circonstances, il s'agit d'une barre oblique (/).
peut être légèrement optimisé :
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ echo $dir."创建成功<br>"; }else{ Directory(dirname($dir)); if(@mkdir($dir,0777)){ echo $dir."创建成功<br>"; } } }
L'effet est le même.
Après cela, j'ai cherché des réponses sur Internet et j'ai trouvé un extrêmement perspicace :
function Directory( $dir ){ return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777); }
Maintenant, expliquons tout function:
Introduisez d'abord l'ordre de priorité des opérateurs logiques en PHP : && > et > ou, c'est-à-dire le type symbolique > type de lettre, type AND> type OR, de sorte que le corps de la fonction peut être vu comme :
is_dir ( $dir ) ou (Directory(dirname( $dir )) et mkdir ( $dir , 0777)) ;
Déterminez d'abord si le répertoire cible existe, s'il existe, en fonction des caractéristiques de court-circuit de ou, tout ce qui suit sera court-circuité et l'exécution sera. être ignoré ; si le répertoire cible n'existe pas, les fonctions suivantes seront exécutées :
Directory(dirname( $dir )) et mkdir ( $dir , 0777)
J'y ai penséd'abord Le but de la récursivité : Exécuter d'abord la récursivité pour confirmer que son répertoire parent (dirname($dir)) a été créé, afin que le suivant La fonction mkdir() n'émettra pas d'avertissement lorsqu'elle ne trouvera pas le répertoire parent lors de la création d'un sous-répertoire.
Après avoir entré la profondeur de la récursion, après avoir confirmé que le répertoire racine le plus profond existe, créez des répertoires dans l'ordre à partir du répertoire racine vers le bas. Enfin, je suggère à ceux qui recherchent un emploi d'aller en ligne et de trouver des questions d'entretien auprès des grandes entreprises. Après tout, leurs examens sont plus complets et plus approfondis. aussi revoir les questions. En plus, il faut aussi que je le fasse un peu, car c'est facile d'avoir trop d'ambition mais pas assez. J'ai optimisé la fonction au début plusieurs fois avant de pouvoir l'utiliser normalement. Il s'agit d'une question d'entretien sur la création récursive d'un répertoire multi-niveaux en PHP. À l'avenir, l'éditeur trouvera quelques questions d'entretien intéressantes à partager avec vous.Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Recommandations associées :Utilisation des fonctions each et list en PHP
Recherche de localisation géographique PHP et calcul de distanceUtiliser les compétences
PHP pour obtenir des fichiers dans le répertoire
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!