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的FTP学习(二)
Oct 09 PHP
PHP临时文件的安全性分析
Jul 04 PHP
10个简化PHP开发的工具
Dec 25 PHP
php实现计数器方法小结
Jan 05 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
学习PHP Cookie处理函数
Aug 09 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
js打造数组转json函数
2015/01/14 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
python装饰器实例大详解
2017/10/25 Python
python生成随机图形验证码详解
2017/11/08 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
Nike香港官网:Nike HK
2019/03/23 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
美德好少年事迹材料
2014/01/19 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Nginx反向代理配置的全过程记录
2021/06/22 Servers