博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中使用mkdir创建多级目录的方法
阅读量:5939 次
发布时间:2019-06-19

本文共 2058 字,大约阅读时间需要 6 分钟。

开始时我认为,只要给一个路径,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。

注意: 自 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新增方法

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)); }

说明:

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

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

总结: 

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

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

3.仍然可以用mkdir很巧妙的来创建多级文件夹。

转载于:https://www.cnblogs.com/jiji262/archive/2012/06/14/2549600.html

你可能感兴趣的文章
Kotlin教程(九)泛型
查看>>
浏览器中唤起native app || 跳转到应用商城下载(二) 之universal links
查看>>
网站性能调优开发工具: Lighthouse, Puppeteer 以及进阶部分丨 Google 开发者大会 2018...
查看>>
33 个 JavaScript 核心概念系列(三): 显式 (名义) 与 隐式 (鸭子)类型转换
查看>>
RocketMQ(六):namesrv再探
查看>>
入门Python神经机器翻译,这是一篇非常精简的实战指南
查看>>
Android LayoutInflater 源码解析
查看>>
如何给localStorage设置一个过期时间?
查看>>
java8-06-自定义Collector-JoinCollector
查看>>
把现有的typesctipt+react项目接入到electron
查看>>
【Docker实战之入门】Dockerfile详细分析:构建docker镜像(4)构建动态网站WordPress...
查看>>
小程序二次贝塞尔曲线,购物车商品曲线飞入效果
查看>>
微信小程序
查看>>
常用的正则表达式分享
查看>>
Spring、Spring Boot和TestNG测试指南 - 测试关系型数据库
查看>>
2017-07-19 前端日报
查看>>
GraphQL 进阶: 基于Websocket的实时Web应用开发
查看>>
直播卡顿原因详解及优化
查看>>
Audio: 如果你愿意一层一层剥开我的心
查看>>
SSE eventSource简介
查看>>