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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
php邮件发送,php发送邮件的类
Mar 24 PHP
PHP编程函数安全篇
Jan 08 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
Python中的闭包总结
2014/09/18 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
python爬虫之百度API调用方法
2017/06/11 Python
python列表list保留顺序去重的实例
2018/12/14 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
python exit出错原因整理
2020/08/31 Python
python基于opencv 实现图像时钟
2021/01/04 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
纬创Java面试题笔试题
2014/10/02 面试题
2014学雷锋活动心得体会
2014/03/10 职场文书
通信工程求职信
2014/07/16 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
会议接待欢迎标语
2014/10/08 职场文书
2015新学期开学寄语
2015/02/26 职场文书
教学质量月活动总结
2015/05/11 职场文书
法制主题班会教案
2015/08/13 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技