在linux系统中,即使我们使用root帐号去手工执行php命令:
mkdir('test', 0777);
结果文件的权限依然为:
drwxr-xr-x 2 root root 4096 Jun 17 11:28 test
很明显这个权限是 755
为什么会这样呢?
在linux系统中在创建文件/文件夹时有一个默认权限,此权限受 umask 设置影响,在/etc/bashrc配置文件中我们可以找到如下配置:
# By default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
这里就说明了问题,linux系统中默认的umask为022,与我们的777 &运算之后,就变成了 755,这就是原因所在了。
解决办法:
你可能会想到,我把这里的022 改为 000 不就可以了么?
当然可以,不过这里的设置直接影响到linux系统的默认权限设置,不仅仅是PHP的问题。所以不建议您这么做。
正确的做法应该是:
mkdir('test', 0777);
chmod('test', 0777);
先创建目录,再使用chmod将权限修改为 777 ,这样就达到我们的目的了。
最后,需要注意一点,权限值最好使用八进制表示,即“0”开头,而且一定不要加引号。
我就犯了一个错,加了引号
chmod('test', '0777'); // 错误,不要加 引号('')
在Linux系统中,使用PHP的mkdir创建的目录权限默认为755,而非预期的777。这是由于Linux的umask设置,默认为022,与777进行按位与运算后得到755。为改变这一情况,不应直接修改系统默认umask,而应在创建目录后使用chmod明确设置权限。正确做法是先mkdir,然后用chmod('test', 0777)确保目录权限为777。注意在使用权限值时要以八进制表示,不加引号。
9633

被折叠的 条评论
为什么被折叠?



