【问题标题】:Why can't PHP create a directory with 777 permissions?为什么PHP不能创建777权限的目录?
【发布时间】:2011-04-29 04:46:17
【问题描述】:

我正在尝试使用 PHP 和以下命令在我的服务器上创建一个目录:

mkdir("test", 0777);

但它没有提供完整的权限,只有这些:

rwxr-xr-x

【问题讨论】:

    标签: php mkdir


    【解决方案1】:

    模式由您当前的umask 修改,在本例中为022

    umask 的工作方式是减法。您将最初授予mkdir 的权限减去umask 以获得实际 权限:

      0777
    - 0022
    ======
      0755 = rwxr-xr-x.
    

    如果您不希望这种情况发生,您需要将您的umask 临时设置为零,这样它就不起作用了。您可以使用以下 sn-p 执行此操作:

    $oldmask = umask(0);
    mkdir("test", 0777);
    umask($oldmask);
    

    第一行将umask 更改为零,同时将前一个存储到$oldmask。第二行使用所需的权限和(现在不相关)umask 创建目录。第三行将umask 恢复到原来的样子。

    有关更多详细信息,请参阅umaskmkdir 的 PHP 文档。

    【讨论】:

      【解决方案2】:

      文件和目录的创建受umask的设置影响。您可以通过如下操作 umask 创建具有特定权限集的文件:-

      $old = umask(0);
      mkdir("test", 0777);
      umask($old);
      

      【讨论】:

        【解决方案3】:

        避免在多线程网络服务器中使用此功能。最好在创建文件后使用 chmod() 更改文件权限。

        示例:

        $dir = "test";
        $permit = 0777;
        
        mkdir($dir);
        chmod($dir, $permit);
        

        【讨论】:

          【解决方案4】:

          对于那些尝试过的人

          mkdir('path', 777);

          它没有工作。

          这是因为,显然,文件模式前面的 0 非常重要,它告诉 chmod 将传递的数字解释为八进制而不是十进制。

          Reference

          附言。这不是问题的解决方案,而只是已接受答案的附加组件

          【讨论】:

          • 需要明确的是,chmod 不做任何特殊的解释... PHP 将 0xxx 解析为八进制符号,该功能适用​​于任何地方,即使在常规函数中:echo max(050, 24); // echos 40, which is what 050 is
          【解决方案5】:

          您的umask 可能已设置为排除那些

          【讨论】:

            【解决方案6】:

            在我的情况下,我必须对centos7使用以下方式,从而解决了问题

            $oldmask = umask(000);//it will set the new umask and returns the old one 
            mkdir("test", 0777);
            umask($oldmask);//reset the old umask
            

            更多详情请见 https://www.php.net/manual/en/function.umask.php

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-17
              • 2012-06-13
              • 1970-01-01
              • 2011-07-13
              • 2015-05-02
              • 1970-01-01
              • 2017-06-12
              相关资源
              最近更新 更多