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实现图象锐化代码
Jun 14 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
Oct 31 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
php用户登录之cookie信息安全分析
May 13 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
php防止sql注入的方法详解
Feb 20 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
php中对象引用和复制实例分析
Aug 14 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php常量详细解析
2015/10/27 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
javascript 节点遍历函数
2010/03/28 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
pandas计数 value_counts()的使用
2019/06/24 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
用python读取xlsx文件
2020/12/17 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
params有什么用
2016/03/01 面试题
个人简历自荐信
2014/06/26 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android