This article mainly introduces the use of recursive functions in PHP to create multi-level directories. Interested friends can refer to it. I hope it will be helpful to everyone.
The details are as follows:
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");
The output result is as shown in the figure:
But it can be seen that it is too troublesome to write. Looking at the file functions in the manual, I saw a dirname() function, whose prototype is as follows:
##string dirname ( string $path )
Given a string containing the full path to a file, this function returns the directory name after removing the file name.
In Windows, both slash (/) and backslash (\) can be used as directory separators. In other circumstances it is a slash (/).
Can be slightly optimized:function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ echo $dir."创建成功<br>"; }else{ Directory(dirname($dir)); if(@mkdir($dir,0777)){ echo $dir."创建成功<br>"; } } }
The effect is the same. After that, I searched for answers on the Internet and found an
unusually insightful :
function Directory( $dir ){ return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777); }
First introduce the priority order of logical operators in PHP
: && > || > and > or, that is, symbolic type > letter type, AND type >OR type, so the function body can be seen as:
is_dir ( $dir ) or (Directory(dirname( $dir )) and mkdir ( $dir , 0777));
First determine whether the target directory exists. If it exists, depending on the short-circuit characteristics of or, the entire following will be short-circuited and execution will be skipped; if the target directory does not exist, the following function body will be executed:Directory(dirname( $dir )) and mkdir ( $dir , 0777)
I thought about itDo the recursion first Purpose: Execute recursion first to confirm that its parent directory (dirname($dir)) has been created, so that the subsequent mkdir() function will not issue a warning when it cannot find the parent directory when creating a subdirectory.
After entering the depth of the recursion, after confirming that the deepest root directory exists, create directories in sequence from the root directory downwards. Finally, I suggest those who are looking for a job to go online and find some interview questions from large companies to do. After all, their exams are more comprehensive and in-depth. When learning knowledge, you should also brush up on the questions. In addition, you must also I have to do it a little bit, because it’s easy to have too much ambition but too little. I optimized the function at the beginning several times before it could be used normally. This is an interview question about recursively creating a multi-level directory in PHP. In the future, the editor will find some interesting interview questions to share with you.Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:Use of each and list functions in PHP
##PHP geographical location search and distance calculationPHP to get the files in the directoryThe above is the detailed content of PHP uses recursive functions to create multi-level directories. For more information, please follow other related articles on the PHP Chinese website!