chmod() 修改文件权限必须用八进制整数,如0755而非755;需先检查文件存在性和目录可写性;web服务器用户权限限制常致失败;递归修改需手动遍历,不可直接使用chmod -r。
chmod() 函数修改文件权限必须用八进制数
PHP 中改文件权限只能靠 chmod(),但它不接受字符串如 "755" 或 "rw-r-xr-x" —— 必须传八进制整数。写成 chmod($file, 755) 是错的,PHP 会当十进制 755 处理(对应八进制 1363),实际权限完全不对。
正确写法是加 0 前缀:chmod($file, 0755)。PHP 解析时才按八进制理解。也可以用 octdec() 转换,但没必要增加开销。
-
0644→ 所有者可读写,组和其他人只读 -
0755→ 所有者可读写执行,组和其他人可读执行 -
0600→ 仅所有者可读写(敏感配置文件推荐)
修改前务必检查文件是否存在且可访问
chmod() 不会自动创建文件,也不校验路径是否真实存在。如果传入不存在的路径,函数返回 false,但不会报错——容易误以为成功。
建议组合使用 file_exists() 和 is_writable()(注意:is_writable() 对目录和文件行为不同,对目录它检查是否有写权限+执行权限):
立即学习“PHP免费学习笔记(深入)”;