php中mkdir()函数的权限问题分析


Posted in PHP onSeptember 24, 2016

问题描述:
使用以下php代码创建了一个目录,期望目录的权限是0777,实际结果是0755

mkdir('./aa/',0777);

分析与测试结果:

1.mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限。
如linux默认的umask一般0022, 即创建目录的默认权限是0755, 所以这时php mkdir('./aa/',0777) 得到目录的权限是0755.

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0755);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0747);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 20
drwxrwxrwx 5 xw xw 4096 2012-06-01 11:58 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxr-xr-x 2 xw xw 4096 2012-06-01 11:57 xw/
drwxr-xr-x 2 xw xw 4096 2012-06-01 11:58 xw1/
drwxr--r-x 2 xw xw 4096 2012-06-01 11:58 xw2/

把系统默认权限改为777,mkdir()可以指定更大权限了

xw@xw-X201:~/Desktop/dd/aa$ umask 000
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 12
drwxrwxrwx 3 xw xw 4096 2012-06-01 12:08 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:08 xw2/

2.chmod()函数不受系统umask影响,可以设置比系统默认权限大的权限。

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/');"
xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw3/');chmod('./xw3/',0777);"
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 20
drwxrwxrwx 5 xw xw 4096 2012-06-01 12:12 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw1/
drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw2/
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:12 xw3/

3.系统的mkdir命令可以设置大于默认值的权限。

xw@xw-X201:~/Desktop/dd/aa$ umask
0022
xw@xw-X201:~/Desktop/dd/aa$ mkdir -m0777 xw
xw@xw-X201:~/Desktop/dd/aa$ ll
总用量 12
drwxrwxrwx 3 xw xw 4096 2012-06-01 12:18 ./
drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../
drwxrwxrwx 2 xw xw 4096 2012-06-01 12:18 xw/

总结:
php若要创建一个有读写权限的目录,最好使用以下代码,不要直接使用mkdir函数指定权限,以避免系统umask的影响

mkdir('./xw/');
chmod('./xw/',0777);
PHP 相关文章推荐
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
经典的PHPer为什么被认为是草根?
Apr 02 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
浅析PHP绘图技术
Jul 03 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php单文件版在线代码编辑器
Mar 12 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
详解phpstorm2020最新破解方法
Sep 17 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 #PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 #PHP
php fread读取文件注意事项
Sep 24 #PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 #PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 #PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 #PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 #PHP
You might like
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
python回调函数用法实例分析
2015/05/09 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python statsmodel的使用
2020/12/21 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
班主任班级寄语大全
2014/04/04 职场文书
国企干部对照检查材料
2014/08/22 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
毕业赠语大全
2015/06/23 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
党员干部学习心得体会
2016/01/23 职场文书