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代码简化
Feb 08 PHP
检测png图片是否完整的php代码
Sep 06 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP中读写文件实现代码
Oct 20 PHP
yii操作session实例简介
Jul 31 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
PHP fclose函数用法总结
Feb 15 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
JS打开新窗口的2种方式
2013/04/18 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
python实现定制交互式命令行的方法
2014/07/03 Python
Python全局变量用法实例分析
2016/07/19 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
Keras 使用 Lambda层详解
2020/06/10 Python
Python 存取npy格式数据实例
2020/07/01 Python
食品安全处置方案
2014/06/14 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
消防演习通知
2015/04/25 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
详解Python函数print用法
2021/06/18 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js