2011-07-11 36 views
6

Tôi có một mảng chứa tên đường dẫn và tên tập tinTạo tập tin và thư mục đệ quy

['css/demo/main.css', 'home.css', 'admin/main.css','account'] 

Tôi muốn tạo ra các tập tin và thư mục nếu họ không tồn tại được nêu ra. Ghi đè chúng nếu chúng đã tồn tại.

Trả lời

18

Đối với mỗi đường dẫn này, bạn sẽ phải xác định xem đó là tệp hay thư mục. Hoặc bạn có thể làm cho tập lệnh của bạn giả định rằng đường dẫn trỏ đến tệp khi tên cơ sở (phần cuối cùng của đường dẫn) chứa dấu chấm.

Để tạo một thư mục đệ quy rất đơn giản:

mkdir(dirname($path), 0755, true); // $path is a file 
mkdir($path, 0755, true);   // $path is a directory 

0755 là biểu hiện cho phép tập tin, bạn có thể đọc về nó ở đây: http://ch.php.net/manual/en/function.chmod.php

2
<?php 
    function mkpath($path) 
    { 
    if(@mkdir($path) or file_exists($path)) return true; 
    return (mkpath(dirname($path)) and mkdir($path)); 
    } 
?> 

Điều này làm cho đường dẫn đệ quy.

+5

'mkdir()' có thể tự làm điều này. Không cần một chức năng đặc biệt. – phant0m

+5

Nhưng 'mkdir' với tham số đệ quy sẽ đặt ** quyền chỉ trên thư mục ** cuối cùng trong các thư mục được tạo. [Xem bài đăng này] (http://php.net/manual/en/function.mkdir.php#96990). – PeterM

-2

Cuối cùng tôi đã nhận phương pháp này và nó hoạt động tốt đối với tôi

shell_exec("mkdir -p ".$your_path); 
+0

bạn không bao giờ nên sử dụng '' exec() '' hoặc '' shell_exec() '' bởi vì nó không an toàn. '' mkdir() '' có tham số thứ ba như được gọi ở trên :) – Northys

+0

Để giải thích thêm về những gì Northys đề cập đến về bảo mật, nếu giá trị trong biến '$ yourpath' được đặt thành'/tmp; rm -rf /; 'hoặc bất kỳ lệnh hệ thống nào khác. Nó có thể hoặc có thể không phải là một mối quan tâm trong trường hợp của bạn, nhưng đoán bạn có thể đánh giá cao những nguy hiểm liên quan đến việc sử dụng 'exec()' và 'shell_exec()' –

0

Tôi vừa sử dụng một cách đơn giản để phát nổ chuỗi và tạo lại và kiểm tra xem tệp có phải là một thư mục hay không

public function mkdirRecursive($path) { 


    $str = explode(DIRECTORY_SEPARATOR, $path); 
    $dir = ''; 
    foreach ($str as $part) { 
     $dir .= DIRECTORY_SEPARATOR. $part ; 
     if (!is_dir($dir) && strlen($dir) > 0 && strpos($dir, ".") == false) { 
      mkdir($dir , 655); 
     }elseif(!file_exists($dir) && strpos($dir, ".") !== false){ 
      touch($dir); 
     } 
    } 
} 
Các vấn đề liên quan