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中cookie的作用域
Mar 27 PHP
PHP 数组入门教程小结
May 20 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 08 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
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
python中的全局变量用法分析
2015/06/09 Python
python reduce 函数使用详解
2017/12/05 Python
详解Python如何生成词云的方法
2018/06/01 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python交互模式基础知识点学习
2020/06/18 Python
flask框架中的cookie和session使用
2021/01/31 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
总会计师岗位职责
2014/02/19 职场文书
一年级班主任感言
2014/03/08 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
Mysql Show Profile
2021/04/05 MySQL
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js