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


Posted in PHP onJune 19, 2014

使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数是为新创建的文件夹指定权限。

但是如果直接用mkdir('文件地址', 0777);时 发现新文件夹的权限并不是777,一般情况下会是022。

因为mkdir在给文件夹制定权限时,会跟当前登录操作系统用户的umask(用户缺省权限属 性)值进行位“与”,得到的值才是最终权限值。

umask 是什么?

我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢?

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是 umask 干的事情。

umask 设置了用户创建文件的默认权限,它与 chmod 的效果刚好相反,umask 设置的是权限“补码”,而 chmod 设置的是文件权限码。一般在 /etc/profile、$HOME/.bash_profile 或 $HOME/.profile 中设置 umask 值。

如何计算 umask 值?

umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的 umask 值中的数字。对于文件来说,这一数字的最大值分别是 6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用 chmod 命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask 中各个数字最大可以到 7。

该命令的一般形式为:umask nnn,其中 nnn 可为 000 - 777。

我们只要记住 umask 是从权限中“拿走”相应的位即可。

如:umask 值为 022,则默认目录权限为 755,默认文件权限为 644。
所以,如果用户umask是022(一般默认是这个),即:000 010 010 在于mkdir指定的777 ,即:111 111 111 位“与”后,得到的真实权限为:022。

如果想让新建文件夹权限最大,有两种方法可以实现:(当然,是在当前用户能赋予最高权限的条件下)

1、修改用户umask,php提供有umask函数:

$oldumask=umask(0); 

mkdir('test',0777); 

umask($oldumask);

这种方法看起来一劳永逸,在脚本开头文件里指定下umask值,后面直接用mkdir就可以控制权限,需要注意的是:在多线程服务器上使用umask函数时,多个线程会公用一个umask,所以可能会造成混乱。

2、使用chmod函数,这也是最常用的方法:

mkdir('文件地址', 0777); 

chmod('文件地址', 0777);

最后,需要注意一点,权限值最好使用八进制表示,即“0”开头,而且一定不要加引号。

PHP 相关文章推荐
PHP禁止个别IP访问网站
Oct 30 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 #PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 #PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 #PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 #PHP
PHP base64编码后解码乱码的解决办法
Jun 19 #PHP
PHP安全的URL字符串base64编码和解码
Jun 19 #PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 #PHP
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
php实现jQuery扩展函数
2009/10/30 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
smarty中常用方法实例总结
2015/08/07 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
JQuery toggle使用分析
2009/11/16 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
环保专业大学生职业规划设计
2014/01/10 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
学习十八大的感悟
2015/08/11 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
golang在GRPC中设置client的超时时间
2021/04/27 Golang
JavaScript实现班级抽签小程序
2021/05/19 Javascript
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle