PHP mkdir 0777权限问题

在linux系统中,即使我们使用root帐号去手工执行php命令:

mkdir('test', 0777);

结果文件的权限依然为:

drwxr-xr-x 2 root root   4096 Jun 17 11:28 test

很明显这个权限是 755

为什么会这样呢?

在linux系统中在创建文件/文件夹时有一个默认权限,此权限受 umask 设置影响,在/etc/bashrc配置文件中我们可以找到如下配置:

# By default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then
        umask 002
else
        umask 022
fi

这里就说明了问题,linux系统中默认的umask为022,与我们的777 &运算之后,就变成了 755,这就是原因所在了。

解决办法:

你可能会想到,我把这里的022 改为 000 不就可以了么?

当然可以,不过这里的设置直接影响到linux系统的默认权限设置,不仅仅是PHP的问题。所以不建议您这么做。
正确的做法应该是:

mkdir('test', 0777);
chmod('test', 0777);

先创建目录,再使用chmod将权限修改为 777 ,这样就达到我们的目的了。

 

最后,需要注意一点,权限值最好使用八进制表示,即“0”开头,而且一定不要加引号

 

我就犯了一个错,加了引号

chmod('test', '0777'); // 错误,不要加 引号('')
### 使用 `mkdir` 创建权限0777 的目录 在 Linux 命令行环境中,可以通过以下命令创建具有指定权限的目录: ```bash [root@fnd_LN ~]# mkdir -m 0777 mu01 mu02 mu03 ``` 上述命令中的 `-m 0777` 参数用于设定新创建目录的权限[^1]。 如果是在 PHP 中通过 `mkdir` 函数创建权限0777 的单级或多级目录,则需注意以下几点: #### 单级目录创建 对于单级目录,可以直接调用 `mkdir` 并传递第二个参数作为权限模式: ```php <?php $path = "test_directory"; if (!is_dir($path)) { if (mkdir($path, 0777)) { echo "目录 {$path} 创建成功并设置了权限0777."; } else { echo "目录 {$path} 创建失败."; } } ?> ``` 此代码片段会尝试创建名为 `test_directory` 的目录,并将其权限设置为 0777[^2]。 #### 多级目录创建 当需要创建多级目录时,必须将第三个参数设为 `true`,以便支持递归创建父目录。以下是具体实现方式: ```php <?php header("Content-type:text/html;charset=utf-8"); $path = "dai/php/php学习"; if (is_dir($path)) { echo "对不起!目录 {$path} 已经存在!"; } else { $res = mkdir($path, 0777, true); if ($res) { echo "目录 {$path} 创建成功,并设置了权限0777."; } else { echo "目录 {$path} 创建失败."; } } ?> ``` 在此示例中,`mkdir` 方法不仅能够处理多层嵌套结构,还能确保每一级子目录都拥有指定的权限模式(即 0777)。需要注意的是,在实际应用过程中可能受到服务器配置或文件系统限制的影响,最终生效的权限可能会低于预期值[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值