mkdir不遵守权限参数


mkdir not obeying permission parameter

我在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(粘性位(。

还要记住,mkdirumask设置的约束,可能不会授予您所要求的权限(您的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)

但从未解决实际问题。。。