PHP如何建立文件夹(mkdir的用法,mkdirs的语法)【转】

(PHPmkdir如何建立多级目录)php

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

说明函数

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

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

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

 

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

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

例 1. mkdir() 例子string

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

若是成功则返回 TRUE,失败则返回 FALSE。io

注意: 自 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很巧妙的来建立

原文连接:https://blog.csdn.net/fc_lamp/article/details/6474340#commentBox

相关文章
相关标签/搜索