php的mkdir()函数创建文件夹比较安全的权限设置方法

问题描述:
使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755

代码如下:

mkdir('./aa/',0777);

分析与测试结果:

 1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限。

如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php  mkdir('./aa/',0777) 得到目录的权限是0755.

代码如下:

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0755);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0747);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 20
drwxrwxrwx 5 xw xw 4096 2012-06-01 11:58 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxr-xr-x 2 xw xw 4096 2012-06-01 11:57 xw/
drwxr-xr-x 2 xw xw 4096 2012-06-01 11:58 xw1/
drwxr--r-x 2 xw xw 4096 2012-06-01 11:58 xw2/

把系统默认权限改为777,mkdir()可以指定更大权限了

代码如下:

xw@xw-X201:~/Desktop/dd/aa$ umask 000
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 12
drwxrwxrwx 3 xw xw 4096 2012-06-01 12:08 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:08 xw2/

2.chmod()函数不受系统umask影响,可以设置比系统默认权限大的权限。


代码如下:

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/');"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw3/');chmod('./xw3/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 20
drwxrwxrwx 5 xw xw 4096 2012-06-01 12:12 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw1/
drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw2/
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:12 xw3/

3.系统的mkdir命令可以设置大于默认值的权限。


代码如下:

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ mkdir -m0777 xw
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 12
drwxrwxrwx 3 xw xw 4096 2012-06-01 12:18 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:18 xw/

  

总结:

php若要创建一个有读写权限的目录,最好使用以下代码,不要直接使用mkdir函数指定权限,以避免系统umask的影响

代码如下:

mkdir('./xw/');
chmod('./xw/',0777);

(0)

相关推荐

  • php使用mkdir创建多级目录入门例子

    先介绍一下 mkdir() 这个函数: mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径:第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权:第三个参数:true表示允许创建多级目录. 举例代码(支持创建中文目录): <?php header("Content-type:text/html;charset=utf-8"); //要创建的多级目录 $path="dai/php/php学习"; //判断

  • php函数mkdir实现递归创建层级目录

    下面是我从网上整理的资料,会为大家详细介绍php函数mkdir的具体用法,希望对有这方面需求的朋友有所帮助. 项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等.这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法. php默认的mkdir一次只能创建一层目录,而要逐层创建各级目录的话,一般都是先从父创建,然后逐层往下创建,但是这样手工创建的话,有点太过于麻烦了. 我们写程序是做什么的?不久是为了能自动化实现我们需要的功能么,这里的方法就是为了能够通

  • PHP mkdir()无写权限的问题解决方法

    使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数是为新创建的文件夹指定权限. 但是如果直接用mkdir('文件地址', 0777);时 发现新文件夹的权限并不是777,一般情况下会是022. 因为mkdir在给文件夹制定权限时,会跟当前登录操作系统用户的umask(用户缺省权限属 性)值进行位"与",得到的值才是最终权限值. umask 是什么? 我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢? 当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是

  • php中mkdir()函数的权限问题分析

    问题描述: 使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755 mkdir('./aa/',0777); 分析与测试结果: 1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限. 如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php mkdir('./aa/',0777) 得到目录的权限是0755. xw@xw-X201:~/Desktop/dd/aa$ umask 0022 xw@xw-X201:~/D

  • PHP mkdir()定义和用法

    使用方法: mkdir(path,mode,recursive,context) 参数 描述 path 必需.规定要创建的目录的名称. mode 必需.规定权限.默认是 0777. recursive 必需.规定是否设置递归模式. context 必需.规定文件句柄的环境.Context 是可修改流的行为的一套选项. mkdir() 尝试新建一个由 path 指定的目录. 默认的 mode 是 0777,意味着最大可能的访问权. <?php mkdir("something");

  • php的mkdir()函数创建文件夹比较安全的权限设置方法

    问题描述: 使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755 复制代码 代码如下: mkdir('./aa/',0777); 分析与测试结果:  1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限. 如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php  mkdir('./aa/',0777) 得到目录的权限是0755. 复制代码 代码如下: xw@xw-X201:~/Desktop/dd/aa$ u

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

    在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其它不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段手册上的有关mkdir的描述,如下: 说明 bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] ) 尝试新建一个由 pathname 指定的目录. 注意也许想用八进制数指定模式,也就是说该

  • java实现ftp上传 如何创建文件夹

    java如何实现ftp上传?如何创建文件夹? 最佳答案: 准备条件:java实现ftp上传用到了commons-net-3.3.jar包 首先建立ftphost连接 public boolean connect(String path, String addr, int port, String username, String password) { try { //FTPClient ftp = new FTPHTTPClient(addr, port, username, password

  • python 实现创建文件夹和创建日志文件的方法

    一.实现创建文件夹和日志 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: nulige import os import datetime #获取系统时间 log_path_suffix = datetime.datetime.now().strftime('%Y-%m-%d ') #创建文件夹 folder_name = '\log' root_directory = 'D:\python\disk_monitor' try: os

  • Python创建文件夹与文件的快捷方法

    前言 Python快捷创建文件夹和文件详解 自己做文件时发现  简单的反复操作十分浪费时间,于是想到了 使用Python,这个分享给大家,快捷高效办公. 项目目录 file11 创建文件夹 file22 创建文件 1.创建文件夹 # 批量 创建文件夹 import os #倒入OS模块 创建文件夹 需要的 # 保存路径,直接从电脑文件夹中复制过来,但是 # 注意,直接复制过来的C:\English\LETS\雅思听力 路径结尾是没斜杠的. # 路径是需要 斜杠结尾的,否则 会以LETS为根目录,

  • 详解C++ 创建文件夹的四种方式

    在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥.因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式: 貌似都是 Windows 的 提前说明:从参数角度上看,其实都应该使用 char*,但是为了方便这里使用的都是 string.在 SO 上找到一个方式把 string 转成 char*,就是调用 string 的 c_str() 函数. 本文示例都是在 E:\database 路径下创建一个叫做 t

  • python根据txt文本批量创建文件夹

    前言 前言:想写这个代码的原因是因为实习的时候需要根据表格名创建对应的文件夹,如果只是很少个数文件夹的话,ctrl+shift+n还可以接受吧,可是一次就要创建几百个文件夹,这就有点方方了.所以我写了一些代码解决实际的问题吧. 正文 正文:其实这是一个简单的代码集合,然后就实现了 代码目录结构 │ 创建文件夹.py ├─docs │ try.txt └─folder 第一个文件自然就是代码的位置:try.txt是存的所有要生成的文件夹名称列表,是直接从excel表格获取复制粘贴的,编码格式utf

  • Ubuntu权限不足无法创建文件夹解决方案

    问题详情: 偶然在根目录创建文件夹的时候,突然显示错误,当时很惊讶,以前没遇见过这样的问题.当时界面是这样的. 用了一个 cd / 命令从用户磁盘跳到了根目录 使用 mkdir 命令准备创建一个文件夹,突然就报错了,仔细一看是用户权限不足引起的创建失败. 解决步骤: 使用root权限创建文件夹,在VMware中如果采用简易安装ubuntu,root用户是没有密码的,也就是说root用户不能用,root权限也就无法开启,这就是ubuntu的安全模式.但是ubuntu提供了一种以普通用户执行超级管理

  • node.js文件的复制、创建文件夹等相关操作

    nodeJS对文件的复制: 一般对于小型文件的复制操作使用的是流的管道运输操作, 首先需要加载引入的文件:var fs = require('fs'); 1.同步创建文件夹 fs.mkdirSync(yourfileDirPath); 异步创建文件夹 fs.mkdir(yourfileDirPath); 2.判断文件夹是否存在-同步 fs.existsSync(dirpath); 异步 fs.exists(dirpath); 利用上面的相关操作,我们可以直接写出一个方法判断创建文件夹, func

  • 详细总结Java创建文件夹的方法及优缺点

    一.传统API创建文件夹方式 Java传统的IO API种使用java.io.File类中的file.mkdir()和file.mkdirs()方法创建文件夹 file.mkdir()创建文件夹成功返回true,失败返回false.如果被创建文件夹的父文件夹不存在也返回false.没有异常抛出. file.mkdirs()创建文件夹连同该文件夹的父文件夹,如果创建成功返回true,创建失败返回false.创建失败同样没有异常抛出. @Test void testCreateDir1() { //

随机推荐