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 相关文章推荐
一个数据采集类
Feb 14 PHP
PHP时间戳使用实例代码
Jun 07 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
PHP中设置时区方法小结
Jun 03 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
6个超实用的PHP代码片段
Aug 10 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
php报错502badgateway解决方法
Oct 11 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的面试题集,附我的答案和分析(一)
2006/11/19 PHP
php实现rc4加密算法代码
2012/04/25 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
web打印小结
2017/01/11 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
ES6新增的数组知识实例小结
2020/05/23 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python实现dict版图遍历示例
2014/02/19 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python机器人行走步数问题的解决
2018/01/29 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
用pycharm开发django项目示例代码
2018/10/24 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
set在python里的含义和用法
2019/06/24 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
keras输出预测值和真实值方式
2020/06/27 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Pycharm github配置实现过程图解
2020/10/13 Python
企业业务员岗位职责
2014/03/14 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
无线电知识基础入门篇
2022/02/18 无线电