PHP mkdir 方法 创建 0777 权限的目录问题

php 中使用 mkdir() 方法创建 0777 权限的目录:

$path = './Logs/secondCheck/';
if(!is_dir($path)){   mkdir($path, 0777, true); }

 

在 linux (Ubuntu)系统中执行该段代码后,实际创建的文件的权限是 755:

 

原因:在 linux 系统中在创建 文件/文件夹 时有一个默认权限,此权限受 umask 设置影响,linux 系统中默认的 umask 为 022,与 777 & 运算之后,就变成了 755。

解决方案:

先创建目录,再使用chmod将权限修改为 777:

$path = './Logs/secondCheck/';
if(!is_dir($path)){ mkdir($path, 0777, true); chmod($path, 0777); }

此时:

 

参考:http://blog.snsgou.com/post-380.html

### 正确使用 `mkdir` 命令创建目录权限解决方案 在 Linux 系统中,`mkdir` 命令用于创建目录。如果遇到因权限不足而导致无法成功创建目录的情况,通常是因为目标路径上的父级目录缺少写入或执行权限[^3]。 #### 1. **调整模式参数** 当调用 PHP 中的 `mkdir()` 函数时,传递给函数的第二个参数表示新目录权限掩码(mode)。然而,在实际应用中,Linux 文件系统的最终权限会受到 umask 设置的影响。因此,建议不要直接指定最高权限 `0777`,而是适当降低权限值以满足需求。例如: ```php $mtd = mkdir($fileDirTemp . $tempFolder, 0776); if (!$mtd) { throw new Exception('Failed to Make Temporary Folder'); } ``` 通过将 mode 参数更改为 `0776` 或其他适合的值,可以有效规避某些服务器配置下的限制[^1]。 #### 2. **验证父目录权限** 即使设置了合理的 mode 参数,仍需确认目标路径上所有上级目录具有足够的访问权。具体来说: - 当前用户应具备对父目录的写 (`w`) 和执行 (`x`) 权限。 - 如果缺乏这些基本权利,则无论怎样设定子目录属性都无法完成操作。 可以通过以下命令检查现有目录权限结构: ```bash ls -ld $(dirname "$fileDirTemp$tempFolder") ``` 必要时授予适当的权限组合,比如设置为 `rwx` 给定组成员共享资源的情况下可用如下方式实现批量赋权: ```bash chmod g+rwx "$(dirname "$fileDirTemp$tempFolder")" chgrp your_group_name "$(dirname "$fileDirTemp$tempFolder")" ``` 这里需要注意的是对于特定用途如SFTP传输服务而言可能还需要额外考虑安全因素从而进一步限定范围内的可控性[^2]. #### 3. **利用 Shell 脚本一次性处理复杂情况** 假如需要在一个步骤里既建立多层嵌套文件夹又同步定义好它们各自的初始状态的话,那么借助 shell scripting 就显得尤为方便快捷了。下面给出一段示范代码片段展示如何达成这一目的: ```bash #!/bin/bash TARGET_DIR="/path/to/your/target/directory" # Create the target directory recursively with specified permissions. install -d -m 0755 -o owner_user -g group_name "${TARGET_DIR}" ``` 上述脚本中的 `-m`, `-o`, and `-g` flags 分别用来指明新的文件夹应该拥有什么样的权限位、归属哪个用户名以及隶属于哪一个群组名之下[^4]. --- ### 总结 综上所述,解决 `mkdir` 在 Linux 下由于权限问题导致失败的方法主要包括合理调节传参数值避开潜在冲突;仔细审查并修正沿途各级节点应有的准入许可级别;最后还可以编写自动化程度较高的辅助工具来简化日常维护流程提高工作效率的同时减少人为失误几率.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值