我在php脚本中使用mkdir在目录/file/file2/file3
中生成file3。我使用权限777,但一旦创建该文件,它看起来总是像dr----x--t 2 admin admin 4096 Jul 1 19:26 file3
。我正在运行Centos 5 64位。文件2已经是权限drwxrwxrwx 16 root root 4096 Jul 1 19:26 file2
。有人知道为什么会这样吗?
mkdir("/file1/file2/file3",777);
您想要使用777
八进制,而不是十进制:
mkdir ("/file1/file2/file3", 0777);
777
十进制原来是1411
八进制,这将给你比特掩码1 100 001 001
,这就是为什么你会得到这些"奇怪"的权限。标准集(最后三个段(为您提供r----x--x
,第一个段将世界权限修改为t
(粘性位(。
还要记住,mkdir
受umask
设置的约束,可能不会授予您所要求的权限(您的umask
设置会从您所要求授予您实际权限的权限中"删除"(。请参阅此处了解详细信息,包括如何避免该问题。
您最好使用mkdir
来创建目录,然后使用chmod
(不受umask
设置的影响(来更改权限。
mkdir()
也受当前umask()
的影响,请参见示例#1
$old = umask(0);
chmod("/path/some_dir/some_file.txt", 0755);
umask($old);
还可以看看纸币
注意:
避免在多线程Web服务器中使用此函数。最好在创建文件后使用chmod((更改文件权限。使用umask((可能会导致并发运行脚本和Web服务器本身的意外行为,因为它们都使用相同的umask。
可以在维基百科上找到一点背景:umask
我以前遇到过这个问题,最终使用解决了这个问题。
chmod ("/file1/file2/file3",777)
但从未解决实际问题。。。