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适配器模式介绍
Aug 14 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
May 31 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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
用PHP查询域名状态whois的类
2006/11/25 PHP
php 文件上传系统手记
2009/10/26 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
python 写入csv乱码问题解决方法
2016/10/23 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python中的global关键字的使用方法
2019/08/20 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
解决Python使用列表副本的问题
2019/12/19 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
厕所文明标语
2014/06/11 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
政协常委会议主持词
2015/07/03 职场文书
网络研修心得体会
2016/01/08 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python