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中Date()时间日期函数的使用方法小结
Apr 20 PHP
php DOS攻击实现代码(附如何防范)
May 29 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php MessagePack介绍
Oct 06 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
php中引用符号(&)的使用详解
Nov 13 PHP
PHP实现多图片上传类实例
Jul 26 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
php面向对象编程self和static的区别
May 08 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
Yii2语言国际化的配置教程
Aug 19 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
协议书的格式
2014/04/23 职场文书
五水共治一句话承诺
2014/05/30 职场文书
教师一帮一活动总结
2014/07/08 职场文书
个人委托书如何写
2014/09/25 职场文书
为自己工作观后感
2015/06/11 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python中22个万用公式的小结
2021/07/21 Python