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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
mysql 搜索之简单应用
Apr 27 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
PHP编程风格规范分享
Jan 15 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php简单socket服务器客户端代码实例
May 18 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
PHP中phar包的使用教程
Jun 14 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
小程序实现选择题选择效果
2018/11/04 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python面向对象编程基础解析(一)
2017/10/26 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Python实现密码薄文件读写操作
2019/12/16 Python
Python 合并拼接字符串的方法
2020/07/28 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
error和exception有什么区别
2012/10/02 面试题
六查六看剖析材料
2014/02/15 职场文书
大学军训感言800字
2014/02/27 职场文书
租房协议书范本
2014/04/09 职场文书
材料化学专业求职信
2014/07/15 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
武侯祠导游词
2015/02/04 职场文书
公司表扬稿范文
2015/05/05 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL