PHP mkdir()权限

11

我有一台 Linux 服务器,使用 Apache 作为 Web 服务器。在我的 PHP 脚本中,我正在使用 0777 模式创建目录。代码非常简单,如下所示:

mkdir($path,0777)
当我运行这个脚本并进入我的服务器文件管理器时,该文件夹已经存在,但是被分配给它的权限是0755。我搞不懂为什么会这样!!当文件夹被创建时,用户列中显示的是apache,但权限是0755。
4个回答

24

你可以尝试使用umask函数。

$old = umask(0); 
mkdir($path,0777); 
umask($old); 

谢谢!问题已解决,但我仍然困惑为什么我的脚本不能创建777文件夹权限? - samach
@Salmanmahmood:这是Linux中应该理解的内容http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html,仅供参考的链接。 - Shakti Singh
3
通常,umask的值为022,这意味着会忽略组和其他用户的写入权限。因此,如果权限请求为0777,则授予的权限将为0777 - 022 = 0755。 - MetaEd
更改umask并不是最安全的方法。Kart Funai在这里建议的方法https://dev59.com/JWsz5IYBdhLWcg3weHoA#7878810更加“安全”。 - qwertynik

6
您可以尝试:
chmod ( string $filename , int $mode )

看看是否可以解决权限问题。


0

可能是您的umask设置:

<?php
$old = umask(0);
mkdir($dir,0777);
mask($old);
?>

0

Apache 可能没有更改此内容的权限。您可以做的是,确保 Apache 正在与当前文件组相同的组中运行。然后 Apache 将能够更改该文件。您可以在此 Apache 配置中更改 Apache 组。或者最简单的方法是将整个项目用户更改为 Apache 用户。然后 Apache 可以进行任何更改。

从服务器转到文件并键入 ls -al 并查看用户和组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接