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 相关文章推荐
服务器web工具 php环境下
Dec 29 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
PHP队列用法实例
Nov 05 PHP
PHP网络操作函数汇总
May 18 PHP
PHP面试题之文件目录操作
Oct 15 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP实现网站应用微信登录功能详解
Apr 11 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 PHP
laravel按天、按小时,查询数据的实例
Oct 09 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
使用apache模块rewrite_module (转)
2007/02/14 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
争先创优活动总结
2014/08/27 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2014年党支部工作总结
2014/11/13 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python