有時候需要遞迴建立目錄函式,這時需要使用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; } }
參考資料:點擊開啟連結點擊開啟連結
點擊開啟連結