2011-07-05 13 views
19

Tôi cần giúp đỡ với một chức năng để tạo ra một thư mục 2 mức trong các trường hợp sau đây:PHP tạo các thư mục lồng nhau

  1. Các mong muốn tiểu thư mục tồn tại trong thư mục cha, không làm gì cả.
  2. Thư mục chính tồn tại, thư mục con không tồn tại. Chỉ tạo thư mục con.
  3. Không có thư mục chính, cũng như thư mục con tồn tại, Trước tiên hãy tạo thư mục mẹ, sau đó là thư mục con.
  4. Nếu Bất kỳ thư mục nào chưa được tạo thành công, hãy trả về FALSE.

Cảm ơn sự trợ giúp.

Trả lời

48

Sử dụng tham số thứ ba của mkdir():

đệ quy Cho phép tạo thư mục lồng nhau được chỉ định trong tên đường dẫn. Mặc định là FALSE.

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

Một vấn đề: khi con đường đã tồn tại, nó sẽ ném ra một lỗi. –

+0

@Paulocoghi Bạn nói đúng. Hành vi này khác với Linux ''mv', chỉ đơn giản bỏ qua các đường dẫn hiện có – KingCrunch

+2

sử dụng nếu (! Is_dir ($ path)) { mkdir ($ path, 0777, true); } – Thyagi

3

bạn có thể thử sử dụng file_exists để kiểm tra xem thư mục có tồn tại hay không và is_dir để kiểm tra xem đó có phải là thư mục hay không.

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

Và để tạo ra một thư mục mà bạn có thể sử dụng mkdir chức năng

Sau đó, phần còn lại của câu hỏi của bạn chỉ được thao tác này cho phù hợp với yêu cầu

0

Chức năng bạn đang tìm kiếm là MKDIR. Sử dụng tham số cuối cùng để tạo thư mục một cách đệ quy. Và read the documentation.

0

Kể từ PHP 5.0+ mkdir có thông số đệ quy sẽ tạo bất kỳ cha mẹ mất tích nào.

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

recursive Cho phép tạo ra các thư mục lồng nhau được quy định trong tên đường dẫn. nhưng không làm việc cho tôi !! cho rằng đây là những gì tôi đã đưa ra !! và nó hoạt động rất hoàn hảo !!

$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

bao nhiêu tôi phải chịu đựng .. và nhận được kịch bản này ..

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