【问题标题】:mkdir not obeying permission parametermkdir 不服从权限参数
【发布时间】:2011-09-27 02:28:11
【问题描述】:

我在 php 脚本中使用 mkdir 在目录 /file/file2/file3 中创建 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 命令?

标签: php linux


【解决方案1】:

你想使用777八进制,不是十进制:

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

777 十进制结果是 1411 八进制,这将为您提供位掩码 1 100 001 001,这就是您获得这些“奇怪”权限的原因。标准集(最后三段)为您提供r----x--x,第一段将世界权限修改为t(粘性位)。

还请记住,mkdir 取决于您的 umask 设置,并且可能不会为您提供您要求的权限(您的 umask 设置从您要求的权限中“删除”,以便为您提供实际的权限)。详情请参阅here,包括如何避免该问题。

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

【讨论】:

    【解决方案2】:

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

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

    也看一下笔记

    注意:

    避免在多线程网络服务器中使用此功能。最好在创建文件后使用 chmod() 更改文件权限。使用 umask() 可能会导致并发运行的脚本和网络服务器本身出现意外行为,因为它们都使用相同的 umask。

    一点背景可以在Wikipedia: umask找到

    【讨论】:

      【解决方案3】:

      我之前遇到过这个问题,最终解决了这个问题。

      chmod ("/file1/file2/file3",777)
      

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

      【讨论】:

      • @Scarface,chmod 不起作用,因为它仍在使用 十进制 777。如果 ti 使用 0777(八进制)代替。
      猜你喜欢
      • 2015-11-01
      • 2011-12-14
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2016-08-24
      • 2013-07-01
      相关资源
      最近更新 更多