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

(PHPmkdir如何创建多级目录)

?? 在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,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 下创建目录函数 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

原文地址:https://www.cnblogs.com/KillBugMe/p/11818653.html

时间: 2024-10-14 08:03:49

PHP如何创建文件夹(mkdir的用法,mkdirs的语法)【转】的相关文章

基于commons-net实现ftp创建文件夹、上传、下载功能

原文:http://www.open-open.com/code/view/1420774470187 package com.demo.ftp; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter

mkdir 创建文件夹或者目录

linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令功能: 通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录.要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限.并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写). 3.命令参数

Linux中 mkdir 创建文件夹命令

语法 mkdir (选项)(参数) 选项 -Z:设置安全上下文,当使用SELinux时有效: -m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限: -p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录: --version 显示版本信息. 参数 目录:指定要创建的目录列表,多个目录之间用空格隔开. 常用实例 1.在当前文件夹下创建多个文件夹 2.指定绝对路径创建xxx文件夹,同时当前路径创建vvv文件夹(举一反三,也可以同时多个绝

自动创建文件夹的两种方法

自动创建文件夹的两种方法 1.CreateDictionary() CreateDirectory(myPath, 0); //在临时文件夹中创建本应用的文件夹 原型为:BOOL WINAPI CreateDirectory(__in  LPCTSTR lpPathName, __in LPSECURITY_ATTRIBUTES lpSecurityAttributes); 其中lpPathName是要创建的目录的路径,第2个涉及安全性问题 传NULL就好了 例如: char path[MAX_

java文件操作 之 创建文件夹路径和新文件

一:问题 java 的如果文件夹路径不存在,先创建:如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 二:代码实现 package edu.tju.cs; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public c

android创建文件夹和文件和安装其他apk

一.android下创建文件夹 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/notes"; File file=new File(path); if(!file.exists()) file.mkdir(); 二.android下创建文件 HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet= new

Java 判断文件夹、文件是否存在、否则创建文件夹

1.判断文件是否存在,不存在创建文件 File file=new File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm"); if(!file.exists()) { try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 2.判断文件夹是否存在,不存在创建文件夹 Fi

如何异步创建文件夹(node)

模块fs作为node的核心模块之一,支持本地文件操作的接口,几乎对于所有的操作都提供同步和异步两种方案.例如,创建文件夹有mkdir和mkdirSync.不论对于mkdir还是mkdirSync,都需要注意,只有当上级文件夹存在的时候才能创建文件夹.例如,在当前工作目录下创建dir1/dir2/dir3,需先创建dir1.dir2,才能创建dir3. 我们先使用同步mkdirSync的方法. 1 var fs=require('fs'); 2 var path='dir1/dir2/dir3';

关于打开文件夹函数的用法 OpenFileDialog(转载)

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentW