PHP遞迴建立目錄(偽原創)

來源:互聯網
上載者:User

有時候需要遞迴建立目錄函式,這時需要使用dirname()函數(取得路徑中的目錄部分)和mkdir()函數(建立目錄)。

先普及一下文法:

dirname

(PHP 4, PHP 5)

dirname — 返迴路徑中的目錄部分

說明 ?

string dirname ( string $path )

給出一個包含有指向一個檔案的全路徑的字串,本函數返回去掉檔案名稱後的目錄名。

參數 ?

path

一個路徑。

在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔字元。在其它環境下是斜線(/)。

返回值 ?

返回 path 的父目錄。 如果在 path 中沒有斜線,則返回一個點('.'),表示目前的目錄。否則返回的是把 path 中結尾的 /component(最後一個斜線以及後面部分)去掉之後的字串。

更新日誌 ?

版本 說明
5.0.0 dirname() 的操作從 PHP 5.0.0 版開始是二進位安全的。
4.0.3 在這個版本中,dirname() 被修正為 POSIX 相容。

範例 ?

Example #1 dirname() 例子

echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc
echo "2) " . dirname("/etc/") . PHP_EOL; // 2) / (or \ on Windows)
echo "3) " . dirname("."); // 3) .
?>

注釋 ?

Note:

dirname() operates naively on the input string, and is not aware of the actual filesystem, or path components such as "..".

Note:

dirname() is locale aware, so for it to see the correct directory name with multibyte character paths, the matching locale must be set using the setlocale() function.

Note:

Since PHP 4.3.0, you will often get a slash or a dot back from dirname() in situations where the older functionality would have given you the empty string.

檢查下面發生變化的例子:


// PHP 4.3.0 以前
dirname('c:/'); // 返回 '.'

// PHP 4.3.0 以後
dirname('c:/x'); // 返回 'c:'
dirname('c:/Temp/x'); // 返回 'c:/Temp'
dirname('/x'); // 返回 '/' (or '\' on Windows)

?>

參見 ?

  • basename() - 返迴路徑中的檔案名稱部分
  • pathinfo() - 返迴文件路徑的資訊
  • realpath() - 返回正常化的絕對路徑名

    mkdir

    (PHP 4, PHP 5)

    mkdir — 建立目錄

    說明 ?

    bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource$context ]]] )

    嘗試建立一個由 pathname 指定的目錄。

    參數 ?

    pathname

    目錄的路徑。

    mode

    預設的 mode 是 0777,意味著最大可能的訪問權。有關 mode 的更多資訊請閱讀 chmod() 頁面。

    Note:

    mode 在 Windows 下被忽略。

    注意也許想用八位元指定模式,也就是說該數應以零打頭。模式也會被當前的 umask 修改,可以用 umask()來改變。

    recursive

    Allows the creation of nested directories specified in the pathname.

    context

    Note: 在 PHP 5.0.0 中增加了對上下文(Context)的支援。有關上下文(Context)的說明參見 Streams。

    返回值 ?

    成功時返回 TRUE, 或者在失敗時返回 FALSE

    更新日誌 ?

    版本 說明
    5.0.0 添加 recursive 參數。
    5.0.0 mkdir() 也可用於某些 URL 封裝協議。參見支援的協議和封裝協議 的列表看看 mkdir() 支援哪些 URL 封裝協議。
    4.2.0 mode 成為可選項。

    範例 ?

    Example #1 mkdir() 例子

    mkdir("/path/to/my/dir", 0700);
    ?>

    Example #2 通過 recursive 參數使用 mkdir()

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

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

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

    // ...
    ?>

    注釋 ?

    Note: 當啟用 安全模式時, PHP 會在執行指令碼時檢查被指令碼操作的目錄是否與被執行的指令碼有相同的 UID(所有者)。

    參見 ?

    • is_dir() - 判斷給定檔案名稱是否是一個目錄
    • rmdir() - 刪除目錄

      遞迴建立目錄函式:

      /** * Create the directory recursively. * @param $path The directory to create, such as, /a/b/c/d/e/ * @param $mode The mode of the directory to create, such as, 0755, 0777. */function RecursiveMkdir($path,$mode) {if (!file_exists($path)) { // The file is not exist.RecursiveMkdir(dirname($path), $mode); // Call itself.if(mkdir($path, $mode)) { // Call mkdir() to create the last directory, and the result is true.return true; } else { // Call mkdir() to create the last directory, and the result is false.return false;   }       } else { // The file is already exist.   return true;   }   }



      參考資料:

      點擊開啟連結點擊開啟連結
      點擊開啟連結

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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