PHP递归创建目录(伪原创)

    有时候需要递归创建目录函数,这时需要使用dirname()函数(取得路径中的目录部分)和mkdir()函数(创建目录)。

    先普及一下语法:

dirname

(PHP 4, PHP 5)

dirname — 返回路径中的目录部分

说明 ¶

string  dirname (  string $path )

给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。

参数 ¶

path

一个路径。

在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。

返回值 ¶

返回 path 的父目录。 如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path 中结尾的 /component(最后一个斜线以及后面部分)去掉之后的字符串。

更新日志 ¶

版本 说明
5.0.0dirname() 的操作从 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)

?>

参见 ¶


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.0mkdir() 也可用于某些 URL 封装协议。参见支持的协议和封装协议 的列表看看 mkdir() 支持哪些 URL 封装协议。
4.2.0mode 成为可选项。

范例 ¶

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($structure0true)) {
    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;
	   }
   }



参考资料:

  1. 点击打开链接
  2. 点击打开链接
  3. 点击打开链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值