


PHP recursively creates multi-level directories, php recursive_PHP tutorial
PHP recursively creates multi-level directories, php recursively
My first feeling is to use recursion to create, the specific idea is 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 below:
But you can see 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 that was extremely insightful:
function Directory( $dir ){ return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777); }
Now let’s explain the whole function:
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 itThe purpose of performing recursion first: Execute recursion first to confirm that its parent directory (dirname($dir)) has been created so that the subsequent mkdir() function will not Warn when creating a subdirectory that the parent directory cannot be found.
After entering the depth of the recursion, confirm that the deepest root directory exists, and then create directories 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, and you must also do it. , 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 multi-level directories in PHP. In the future, the editor will find some interesting interview questions to share with you.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.
