【问题标题】:mkdir() creating 0755 instead of 0775mkdir() 创建 0755 而不是 0775
【发布时间】:2016-08-13 08:03:39
【问题描述】:

我有以下代码:

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 许可文件夹。

例如预览代码将返回:

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

【问题讨论】:

  • 检查 umask 值。您可以在 shell 中输入 umask 以找出掩码值。我猜你的 umask 值是 022
  • $dir = 'path/to/folder/' makedirs($dir, 0775) 如果这是您真正使用的,那是不完整的。如果那是伪代码,请发布正确的语法。
  • $mode = 0775 由于自定义函数,前导零可能被视为八进制 btw。尝试在 makedirs($dir, 0775) 内部引用它和相同的内容。
  • var_dump(); 揭示了什么?
  • @Fred-ii- 我使用的文件夹无关紧要,函数成功创建文件夹并在其中写入一些文件。问题是许可证。 (请注意,您可能希望将模式指定为八进制数,这意味着它应该有一个前导零。-php.net/manual/en/function.mkdir.php

标签: php file-permissions chmod mkdir


【解决方案1】:

您可以执行以下操作

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.ini 中删除 umask 代码。 虽然上面的代码可以工作,但不建议在 php 脚本中设置 umask。

根据 PHP 手册页

避免在多线程网络服务器中使用此功能。最好是 创建文件后使用 chmod() 更改文件权限。 使用 umask() 可能会导致并发运行的意外行为 脚本和网络服务器本身,因为它们都使用相同的 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 默认值文件(定义用户登录时的环境)。

来源 http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

【讨论】:

  • 您对umask 的评论将我带到这里:php.net/manual/en/function.umask.php,第一个示例解释了您的答案,对其他人有用。
  • 使用 chmod 确实更有意义。您可能仍需要将系统的 umask 值设置为 002 至少一次。您可以在/etc/bashrc/etc/profile 文件中为所有用户设置umask。
  • 好吧,出于安全原因,现在我在 mkdir() 之后使用 chmod() 为文件夹提供所需的许可。
猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 2011-07-26
  • 2023-03-22
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2018-07-30
相关资源
最近更新 更多