有时候需要递归创建目录函数,这时需要使用dirname()函数(取得路径中的目录部分)和mkdir()函数(创建目录)。
先普及一下语法:
dirname
(PHP 4, PHP 5)
dirname — 返回路径中的目录部分
参数 ¶
-
一个路径。
在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。
path
返回值 ¶
返回 path 的父目录。 如果在 path
中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path
中结尾的 /component(最后一个斜线以及后面部分)去掉之后的字符串。
更新日志 ¶
版本 | 说明 |
---|---|
5.0.0 | dirname() 的操作从 PHP 5.0.0 版开始是二进制安全的。 |
4.0.3 | 在这个版本中,dirname() 被修正为 POSIX 兼容。 |
范例 ¶
Example #1 dirname() 例子
<?php
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
// 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 — 新建目录
说明 ¶
$pathname
[, int $mode
= 0777 [, bool $recursive
= false [, resource$context
]]] )
尝试新建一个由 pathname 指定的目录。
参数 ¶
-
目录的路径。
-
默认的 mode 是 0777,意味着最大可能的访问权。有关 mode 的更多信息请阅读 chmod() 页面。
Note:
mode
在 Windows 下被忽略。注意也许想用八进制数指定模式,也就是说该数应以零打头。模式也会被当前的 umask 修改,可以用 umask()来改变。
-
Allows the creation of nested directories specified in the
pathname
. -
Note: 在 PHP 5.0.0 中增加了对上下文(Context)的支持。有关上下文(Context)的说明参见 Streams。
pathname
mode
recursive
context
返回值 ¶
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
更新日志 ¶
版本 | 说明 |
---|---|
5.0.0 | 添加 recursive 参数。 |
5.0.0 | mkdir() 也可用于某些 URL 封装协议。参见支持的协议和封装协议 的列表看看 mkdir() 支持哪些 URL 封装协议。 |
4.2.0 | mode 成为可选项。 |
范例 ¶
Example #1 mkdir() 例子
<?php
mkdir("/path/to/my/dir", 0700);
?>
Example #2 通过 recursive
参数使用 mkdir()
<?php
// 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...');
}
// ...
?>
递归创建目录函数:
/**
* 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;
}
}
参考资料: