Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mkdir()创建0755而不是0775_Php_File Permissions_Chmod_Mkdir - Fatal编程技术网

Php mkdir()创建0755而不是0775

Php mkdir()创建0755而不是0775,php,file-permissions,chmod,mkdir,Php,File Permissions,Chmod,Mkdir,我有以下代码: function makedirs($dirpath, $mode = 0775, $recursive = true) { return is_dir($dirpath) || mkdir($dirpath, $mode, $recursive); } $dir = 'path/to/folder/'; makedirs($dir, 0775); 问题是:即使将0775或任何其他内容作为$mode的参数传递,mkdir()也会创建0755许可文件夹 例如,prev

我有以下代码:

function makedirs($dirpath, $mode = 0775, $recursive = true) {
    return is_dir($dirpath) || mkdir($dirpath, $mode, $recursive);
}

$dir = 'path/to/folder/';

makedirs($dir, 0775);
问题是:即使将0775或任何其他内容作为
$mode
的参数传递,
mkdir()
也会创建0755许可文件夹

例如,previows代码将返回:

  • 路径/(0755)
  • 至/(0755)
  • 文件夹/(0755)

    • 您可以执行以下操作

      function makedirs($dirpath, $mode = 0775, $recursive = true) {
          $oldMask=umask(002);
          $status = is_dir($dirpath) || mkdir($dirpath, $mode, $recursive);
          umask($oldMask);
          return $status;
      }
      
      $dir = 'path/to/folder/'
      makedirs($dir, 0775);
      
      注意:尽管您可以使用umask(0)允许777个权限,但不建议使用,因为这可能会带来安全问题

      编辑

      尝试在系统范围内为所有用户或您自己设置umask值,以从php中删除umask代码。 尽管上述代码可以工作,但不建议在php脚本中设置umask

      根据PHP手册页面

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

      您可以在/etc/bashrc或/etc/profile文件中为所有用户设置umask。 默认情况下,大多数Linux发行版将其设置为0022(022)或0002(002)。打开/etc/profile或~/.bashrc文件,输入:

      #vi/etc/profile

      $vi~/.bashrc

      追加/修改以下行以设置新的umask:
      umask 022

      保存并关闭文件。更改将在下次登录后生效。所有UNIX用户都可以覆盖其/etc/profile文件、~/.profile(Korn/Bourne shell)~/.cshrc文件(C shell)、~/.bash_profile(bash shell)或~/.login文件(定义登录时的用户环境)中的系统umask默认值

      来源

      检查umask值。您可以在shell中键入umask以查找掩码值。我猜您的umask值是022
      $dir='path/to/folder/'makedirs($dir,0775)
      ,如果这是您真正使用的,那么这是不完整的。如果这是伪代码,请发布正确的语法。
      $mode=0775
      由于自定义函数,前导零可能被视为八进制btw。试着在
      makedirs($dir,0775)
      中引用它和相同的内容显示?@Fred ii-我使用的文件夹无关紧要,该功能成功创建了文件夹并在其中写入了一些文件。问题是许可证。(请注意,您可能希望将模式指定为八进制数,这意味着它应该有一个前导零。-)您关于
      umask
      的评论将我带到了这里:,其中第一个示例解释了您的答案,可以对其他人有用。使用chmod确实更有意义。您可能仍然需要将系统的umask值设置为002至少一次。您可以在
      /etc/bashrc
      /etc/profile
      文件中为所有用户设置umask。现在,出于安全原因,我在mkdir()之后使用chmod()为文件夹提供所需的权限。