2011-07-05 165 views
19

我需要一個功能有助於創造一個2級目錄以下幾種情況:PHP創建嵌套目錄

  1. 所需的子目錄的父目錄存在,什麼也不做。
  2. 父目錄存在,子目錄不存在。只創建子目錄。
  3. 父目錄和子目錄都不存在,首先創建父目錄,然後創建子目錄。
  4. 如果任何目錄未成功創建,則返回FALSE。

感謝您的幫助。

回答

48

使用mkdir()第三個參數:

遞歸允許創建路徑名中指定的嵌套目錄。默認爲FALSE。

$path = '/path/to/folder/with/subdirectory'; 
mkdir($path, 0777, true); 
+0

一個問題:當路徑已經存在,它會拋出一個錯誤。 –

+0

@Paulocoghi你是對的。這種行爲不同於Linux的''mv',它只是簡單地忽略現有路徑 – KingCrunch

+2

如果(!is_dir($ path))使用 } – Thyagi

3

您可以嘗試使用file_exists來檢查文件夾是否存在,並且is_dir檢查文件夾是否存在。

if(file_exists($dir) && is_dir($dir)) 

並創建一個目錄,你可以使用mkdir功能

然後你的問題的剩下的只是操縱這個以適應需求

0

從PHP 5.0+開始mkdir有一個遞歸參數,它會創建任何缺失的父項。

0
// Desired folder structure 
$structure = './depth1/depth2/depth3/'; 

// To create the nested structure, the $recursive parameter 
// to mkdir() must be specified. 

if (!mkdir($structure, 0744, true)) { 
    die('Failed to create folders...'); 
} 

Returns TRUE on success or FALSE on failure. 

PHP: mkdir - Manual

3

遞歸允許指定路徑嵌套目錄的創建。 但沒有爲我工作! 因爲這是我想出的!它的工作非常完美!

$upPath = "../uploads/RS/2014/BOI/002"; // full path 
$tags = explode('/' ,$upPath);   // explode the full path 
$mkDir = ""; 

    foreach($tags as $folder) {   
     $mkDir = $mkDir . $folder ."/"; // make one directory join one other for the nest directory to make 
     echo '"'.$mkDir.'"<br/>';   // this will show the directory created each time 
     if(!is_dir($mkDir)) {    // check if directory exist or not 
      mkdir($mkDir, 0777);   // if not exist then make the directory 
     } 
    } 
0

多少我遭受了..而得到這個腳本..

function recursive_mkdir($dest, $permissions=0755, $create=true){ 
    if(!is_dir(dirname($dest))){ recursive_mkdir(dirname($dest), $permissions, $create); } 
    elseif(!is_dir($dest)){ mkdir($dest, $permissions, $create); } 
    else{return true;} 
}