mkdir不遵守权限参数

3
我在一个php脚本中使用mkdir命令创建/file/file2/file3目录下的文件夹。我使用了权限777,但是每次创建后的文件夹都是dr----x--t 2 admin admin 4096 Jul 1 19:26 file3这样的形式。我正在运行Centos 5 64位操作系统。file2已经有drwxrwxrwx 16 root root 4096 Jul 1 19:26 file2的权限。请问有人知道为什么会出现这种情况吗?
mkdir("/file1/file2/file3",777);

默认的 mkdir 模式为 777,你尝试先创建目录然后再执行 PHP 的 chmod 命令了吗? - user652650
3个回答

12

您需要使用 777八进制表示法,而不是十进制:

mkdir ("/file1/file2/file3", 0777);

777 十进制转换成 1411 八进制,这将为您提供位掩码 1 100 001 001,这就是为什么你会得到那些“奇怪”的权限。标准集(最后三个段)给您 r----x--x,第一个段修改了世界权限为 t (粘着位)。

还要记住,mkdir 受您的 umask 设置的影响,可能不会按照您请求的权限提供权限(您的 umask 设置从您所请求的权限中“移除”,以便给您实际的权限)。有关详细信息,请参见这里,包括如何避免此问题。

您最好使用 mkdir 创建目录然后使用 chmod(不受您的 umask 设置影响)更改权限。


3

mkdir()函数也受当前umask()的影响,参见示例#1。

$old = umask(0);
chmod("/path/some_dir/some_file.txt", 0755);
umask($old);

此外,请注意以下说明:

说明:

在多线程的 Web 服务器中,避免使用此函数。最好在创建文件后使用 chmod() 更改文件权限。因为所有脚本和 Web 服务器都使用相同的 umask,使用 umask() 可能会导致同时运行的脚本和 Web 服务器本身出现意外行为。

有关更多背景信息,请参见维基百科:umask


1
我以前遇到过这个问题,并最终通过其他方法解决了它。
chmod ("/file1/file2/file3",777)

虽然从未解决实际问题...


@Scarface,chmod 没有起作用是因为它仍在使用 十进制 777。如果改用 0777(八进制),它就可以生效了。 - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接