PHP递归创建目录(伪原创)
有时候需要递归创建目录函数,这时需要使用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; } }
参考资料:
点击打开链接
下一篇: sql的执行速度如何提升?
推荐阅读
-
Linux系统递归生成目录中文件的md5的方法_PHP
-
php递归法读取目录及文件的方法_PHP
-
1kb文件夹快捷方式病毒清除专用附件 php递归列出所有文件和目录的代码
-
php循环检测目录是否存在并创建(循环创建目录)
-
apache 伪静态设置了访问目录或文件都重定向到 index.php ,可是访问目录时无效???
-
怎么找回回收站删除的文件 php自定义函数之递归删除文件及目录
-
为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解
-
PHP递归创建多级目录(一道面试题的解题过程)
-
PHP递归创建多级目录(一道面试题的解题过程)
-
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)_PHP