php创建⽂件夹后设置⽂件夹权限(转)
PHP mkdir()⽆写权限的问题解决⽅法
使⽤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。mkdirs方法
所以,如果⽤户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”开头,⽽且⼀定不要加引号。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。