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的curl实现get和post的代码
Aug 23 PHP
常用的php对象类型判断
Aug 27 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
PHP开发的一些注意点总结
Oct 12 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 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 字符串操作入门教程
2006/12/06 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Django实现自定义404,500页面教程
2017/03/26 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
简历中自我评价怎么写
2014/02/12 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
企业宣传标语
2014/06/09 职场文书
消防安全宣传口号
2014/06/10 职场文书
Python基础之pandas数据合并
2021/04/27 Python
基于Redission的分布式锁实战
2022/08/14 Redis