PHP mkdir创建文件夹实现方法解析


Posted in PHP onNovember 13, 2020

在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其它不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段手册上的有关mkdir的描述,如下:

说明

bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] )

尝试新建一个由 pathname 指定的目录。

注意也许想用八进制数指定模式,也就是说该数应以零打头。模式也会被当前的 umask 修改,可以用 umask() 来改变。

注意: mode 在 Windows 下被忽略。自 PHP 4.2.0 起成为可选项。

默认的 mode 是 0777,意味着最大可能的访问权。有关 mode 的更多信息请阅读 chmod() 页面。

例 1. mkdir() 例子

<?php
mkdir("/path/to/my/dir", 0700);
?>

如果成功则返回 TRUE,失败则返回 FALSE。

例 2. mkdir() 例子

$dir = iconv("UTF-8", "GBK", "public/log");
if (!file_exists($dir)){
	mkdir ($dir,0777,true);
	echo '创建文件夹log成功';
} else {
	echo '需创建的文件夹log已经存在';
}

iconv方法是为了防止中文乱码,保证可以创建识别中文目录,不用iconv方法格式的话,将无法创建中文目录

mkdir方法的第一个参数是要创建的目录路径,第二个参数是指创建目录的权限,在windows系统下该参数会被忽略,第三个参数是指是否创建多级目录,默认为false
参考链接:https://www.cnblogs.com/modou/p/5991365.html

注意: 自 PHP 5.0.0 rmdir() 也可用于某些 URL 封装协议。参见附录 N 的列表看看 rmdir() 支持哪些 URL 封装协议。

注意: 对 context 的支持是 PHP 5.0.0 添加的。有关 context 的说明见参考 CLX, Stream Functions。

注意: recursive 参数是 PHP 5.0.0 添加的。

注意: 当安全模式被激活时,PHP 将检查被操作的目录是否和正在执行的脚本有相同的 UID(所有者)。

以上是PHP5手册上的描述信息,即你可以这样:mkdir('./test',0777)就能创建一个文件夹了。但是如何递归创建多级目录呢?
其方式有:

1 PHP5 下创建目录函数 mkdir 增加了一个新的参数 recursive ,通过设置 recursive 为 true 可以实现递归创建目录的目的,但是对PHP4就不行了。

2 自己写一个递归创建多级目录。

这里,我对第二种方式作一点说明,也有两种方式,如下:

第一种(用mkdirs来产生多级父级)

function mkdirs($dir, $mode = 0777)
{
if (is_dir($dir) || @mkdir($dir, $mode)) return TRUE;
if (!mkdirs(dirname($dir), $mode)) return FALSE;
return @mkdir($dir, $mode);
}

说明:

1 首先 简单说一下mkdir()与mkdirs()的区别,以及,is_dir和dirname():

mkdir() 只能在已经存在的目录中创建创建文件夹(即父级必须有才行)。

mkdirs() 可以在不存在的目录中创建文件夹。诸如:a//b,既可以创建多级目录。

dirname() 是返回路径中的目录部分。

is_dir() 用于判断给出的文件名是否是一个有效的目录

2 大致流程为:

(1) 先用is_dir判断是否已是一个文件夹,如果是则返回TRUE。如没有(或者不是文件夹),则试着创建它,当然有可以父级不存在,那mkdir直接就创不成功,但也为不报错,所以就用@来抑止报非致命错误。

(2)如果传参数都不满足条件,那么就进入第二个if语句,先是取得路径中的目录部分,当然有可能是不存在的多级父级,所以用了mkdirs()来先创建父级,如果成功(不成功返回FALSE),那么再用mkdir来创建最终的目录了。
好了,以上就是第一种方案。

第二种(说明:此方案是相当的精简,那是相当的不错的方案,推荐使用它)

function create_folders($dir){
return is_dir($dir) or (create_folders(dirname($dir)) and mkdir($dir, 0777));
}

说明: 1 大致流程: 得到路径后,先判断是否已是一个有效的文件目录,如是则返回,结束程序。如果不是,(由于这里用了OR作先择性的条件,即只要满足其中一个条件就行),则递归再调用自身,并且传入的路径中,少一级目录。这样来先回到上级有的父级目录中,再用mkdir来创建下一级的。

好了,以上就是用PHP来创建文件夹(以及多级文件夹)的方法。_

总结:

1 用PHP5中自带的mkdir 中的一个新的参数 recursive ,通过设置 recursive 为 true 可以实现递归创建目录的目的,但是对PHP4就不行了。

2 自己写的方法中,用mkdirs来创建多级父级目录方式

3 仍然用mkdir很巧妙的来创建

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
织梦模板标记简介
Mar 11 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
PHP 开源框架22个简单简介
Aug 24 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php字符串截取函数用法分析
Nov 25 PHP
php中fsockopen用法实例
Jan 05 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP接入支付宝接口失效流程详解
Nov 10 #PHP
基于PHP实现用户在线状态检测
Nov 10 #PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 #PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 #PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 #PHP
PHP中的异常处理机制深入讲解
Nov 10 #PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 #PHP
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
简述php环境搭建与配置
2016/12/05 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
利用python代码写的12306订票代码
2015/12/20 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
争论的故事教学反思
2014/02/06 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
欢迎新生标语
2014/10/06 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python