php函數mkdir實現遞迴建立層級目錄的方法

來源:互聯網
上載者:User
當我們想在自己的網站中添加多級目錄時,可以運用php函數mkdir()來實現這個功能。具有一定的參考價值,感興趣的小夥伴們可以參考一下。

下面是我從網上整理的資料,會為大家詳細介紹php函數mkdir的具體用法,希望對有這方面需求的朋友有所協助。

項目開發中免不了要在伺服器上建立檔案夾,比如上傳圖片時的目錄,模板解析時的目錄等。這不當前手下的項目就用到了這個,於是總結了幾個迴圈建立層級目錄的方法。

php預設的mkdir一次只能建立一層目錄,而要逐層建立各級目錄的話,一般都是先從父建立,然後逐層往下建立,但是這樣手工建立的話,有點太過於麻煩了。

我們寫程式是做什麼的?不久是為了能自動化實現我們需要的功能麼,這裡的方法就是為了能夠通過程式幫我們自動建立完成層級目錄。

思路有兩種:

一、從上往下(父級→子級)

1.先判斷 父級 目錄是否存在,不存在則建立;
2.判斷二級子目錄是否存在,不能存在則建立,
3.在第二步中以子目錄作為參數遞迴調用函數本身。

二、從下往上(子級→父級)

1.先判斷最底層目錄是否存在;
2.判斷底層目錄的上層目錄是否存在,不存在則以上層目錄作為參數遞迴進行。

以下是幾種方法:

1:遞迴建立目錄,此種方法是我目前感覺比較好的方法。

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/');

2:遞迴建立級聯目錄,如果第一個方法不太理解的話,可以結合下面這個方法理解

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/');

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');

PS:有時候程式指令碼的檔案不一定在網站根目錄,而建立的檔案需要在根目錄建立,那我們就需要用到網站根目錄路徑:$_SERVER['DOCUMENT_ROOT'];所以我不建議使用後面的三個方法。

以下三種是通過'/'分割路徑的方法進行建立的。

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);    }  }}

以上就是本文的全部內容,希望對大家的學習有所協助。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.