有時候需要遞歸創建目錄函數,這時需要使用dirname()函數(取得路徑中的目錄部分)和mkdir()函數(創建目錄)。
先普及一下語法:
(PHP 4, PHP 5)
dirname — 返回路徑中的目錄部分
$path
)
給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名。
path
一個路徑。
在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環境下是斜線(/)。
返回 path 的父目錄。 如果在 path
中沒有斜線,則返回一個點('.'),表示當前目錄。否則返回的是把 path
中結尾的 /component(最後一個斜線以及後面部分)去掉之後的字符串。
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)
?>
(PHP 4, PHP 5)
mkdir — 新建目錄
$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
。
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(所有者)。
遞歸創建目錄函數:
/** * 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; } }
點擊打開鏈接點擊打開鏈接