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()为文件夹提供所需的权限。