0755与0777的核心区别在于组和其他用户是否拥有写权限:0755为所有者rwx、组和其他用户r-x(不可写),0777则三者均rwx;但PHP中mkdir(,0777)常因系统umask(如0022)限制实际得0755,需配合chmod()或临时umask(0)才可实现真正0777,生产环境推荐最小权限原则,慎用0777。

0755 和 0777 是八进制表示的 Unix/Linux 文件系统权限,它们在 PHP 的 mkdir() 中控制新建目录的访问规则,核心区别在于“组用户”和“其他用户”是否拥有写权限。
权限数字含义拆解
三位八进制数分别对应:
第一位(百位):所有者(user)权限
第二位(十位):所属组(group)权限
第三位(个位):其他用户(others)权限
每位数字是 4(读 r)、2(写 w)、1(执行 x)的组合:
- 0755 = 7(rwx)→ 所有者可读、写、执行;5(r-x)→ 组用户和其他用户仅可读、执行(不可写)
- 0777 = 7(rwx)→ 所有者、组用户、其他用户都可读、写、执行(完全开放)
实际创建时权限可能“缩水”
PHP 的 mkdir($path, 0777) 并不总能真正得到 0777 权限。原因在于系统 umask(默认常为 0022)会屏蔽掉部分权限:
- 实际生效权限 = 指定权限 & (~umask)
例如 umask=0022 → ~0022 = 0755 → 0777 & 0755 = 0755 - 所以即使写 0777,Linux 下常见结果仍是 0755
- 若真需 0777,可临时重置 umask:
umask(0); mkdir($path, 0777);,但需谨慎
安全与使用建议
生产环境中应遵循最小权限原则:
- 0755 更常用且安全:Web 服务器(如 Apache/Nginx)通常以特定用户运行,只需所有者可写,组和其他人只读执行即可满足多数需求(如缓存目录、上传目录的父级)
- 0777 风险高:任何系统用户都能修改或删除该目录内容,易被恶意利用;共享主机通常禁止该权限
- 如确需开放写权限(如上传目录),推荐用
chmod()单独设置:mkdir($path, 0755, true); chmod($path, 0775);(仅开放给组写入)
Windows 系统注意
Windows 不支持 Unix 权限模型,mkdir() 的 $mode 参数会被忽略,无论传 0755 还是 0777 都无实际效果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











