某个定时job用root用户mkdir('./test/',0777)新建了目录,指定了权限是0777,结果获得的是0755,
而web上用www用户也在这目录创建目录和文件,结果报错了,一开始一直以为是有人修改了权限。。。。
mkdir()函数指定的目录权限只能小于等于系统umask设定的默认权限。
默认的umask如果为目录权限为0755, 那php mkdir('./test/',0777) 得到目录的权限是0755.
解决方法
1,开始时指定umask
$old=umask(0);
mkdir('./test/',0777);
umask($old);
2,使用chmod
mkdir('./test/',0777);
chmod('./test/',0777);
手册里面提到:
在多线程的服务器上尽量避免使用这个函数。创建文件后要改变其权限最好还是使用 chmod()。使用 umask()会导致并发程序和服务器发生不可预知的情况,因为它们是使用相同的 umask 的。