Die PHP-Funktion mkdir implementiert die rekursive Erstellung hierarchischer Verzeichnisse

高洛峰
Freigeben: 2023-03-03 20:26:02
Original
1527 Leute haben es durchsucht

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.

Es gibt mehrere Methoden:

1: Rekursiv ein Verzeichnis erstellen. Diese Methode ist meiner Meinung nach die bessere Methode.

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/');
Nach dem Login kopieren
2: Kaskadierende Verzeichnisse rekursiv erstellen Wenn Sie die erste Methode nicht verstehen, können Sie sie mit der folgenden Methode kombinieren, um

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/');
Nach dem Login kopieren
3: Kaskadierung iterativ zu erstellen Verzeichnisse

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');
Nach dem Login kopieren
PS: Manchmal befinden sich die Dateien des Programmskripts nicht unbedingt im Stammverzeichnis der Website, und die erstellten Dateien müssen im Stammverzeichnis erstellt werden, dann müssen wir die Website verwenden Stammverzeichnispfad: $_SERVER['DOCUMENT_ROOT' ];Daher empfehle ich nicht, die letzten drei Methoden zu verwenden.


Die folgenden drei entstehen, indem der Pfad durch „/“ geteilt wird.

function mk1($dir){
  $arr=explode("/",$dir);
  $path='';
  for($i=0;$i< count($arr);$i++){
    $path.=$arr[$i].&#39;/&#39;;
    if(!is_dir($path)){
      mkdir($path,0777);
    }
  }
}
 
function mk2($dir){
  static $i=0;
  $path=&#39;&#39;;
  $arr=explode("/",$dir);
  if($i < count($arr)){
    $path.=$arr[$i];
    mkdir($path,0777,true);
    $i++;
    mk2($path."/");
  }
}
function mkdirs0($path){
  $dirs = explode(&#39;/&#39;,$path);
  for ($c=0;$c < count($dirs); $c++) {
    $thispath="";
    for ($cc=0; $cc <= $c; $cc++) {
      $thispath.=$dirs[$cc].&#39;/&#39;;
    }
    if (!is_dir($thispath)) {
      mkdir($thispath,0777);
    }
  }
}
Nach dem Login kopieren
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!