Das Folgende sind die Informationen, die ich aus dem Internet zusammengestellt habe. Ich werde die spezifische Verwendung der PHP-Funktion mkdir im Detail vorstellen und hoffe, dass sie Freunden, die diesbezüglich Bedürfnisse haben, hilfreich sein werden.
Bei der Projektentwicklung ist es unvermeidlich, Ordner auf dem Server zu erstellen, z. B. das Verzeichnis beim Hochladen von Bildern, das Verzeichnis beim Parsen von Vorlagen usw. Dies wird in meinem aktuellen Projekt nicht verwendet, daher habe ich mehrere Methoden zum Erstellen hierarchischer Verzeichnisse in einer Schleife zusammengefasst.
PHPs Standard-Mkdir kann jeweils nur eine Ebene von Verzeichnissen erstellen. Wenn Sie Verzeichnisse auf allen Ebenen Schicht für Schicht erstellen möchten, erstellen Sie sie normalerweise zuerst aus der übergeordneten Ebene und dann Schicht für Schicht. Wenn Sie es jedoch manuell auf diese Weise erstellen, ist es etwas zu mühsam.
Was machen wir, wenn wir Programme schreiben? Soll die Funktion, die wir benötigen, bald automatisch realisiert werden? Die Methode hier besteht darin, uns dabei zu helfen, das hierarchische Verzeichnis automatisch über das Programm zu erstellen und zu vervollständigen.
Es gibt zwei Ideen:
1. Von oben nach unten (übergeordnetes Verzeichnis → untergeordnetes Verzeichnis)
Bestimmen Sie zunächst, ob das übergeordnete Verzeichnis If ist es existiert, erstellen Sie es, wenn es nicht existiert;
2. Bestimmen Sie, ob das sekundäre Unterverzeichnis existiert, erstellen Sie es, wenn es nicht existieren kann,
3 Rufen Sie im zweiten Schritt die Funktion selbst rekursiv mit dem Unterverzeichnis auf Parameter.
2. Von unten nach oben (untergeordnetes Verzeichnis → übergeordnetes Verzeichnis)
Bestimmen Sie zunächst, ob das untere Verzeichnis vorhanden ist existiert Wenn es existiert, wenn es nicht existiert, wird das obere Verzeichnis als Parameter für die Rekursion verwendet.
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/');
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/');
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');
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); } } }