PHP源码搭建时文件权限是运行前提而非附加步骤;必须明确Web服务器执行用户(如www-data),统一归属后设目录755、PHP文件644、配置文件600/640、可写目录775,禁用777,部署后需验证权限与解析行为。
PHP源码搭建时,文件权限设置不是附加步骤,而是运行前提。权限配错,轻则报错“Permission denied”,重则导致配置文件被直接下载、缓存目录不可写、后台无法上传——这些问题几乎都源于所有权与权限位的错配。
Web服务器以特定系统用户身份运行PHP脚本,这个用户必须对源码目录有读取权,对日志、缓存、上传等目录有写入权。常见情况如下:
ps aux | grep php-fpm 或 FPM 配置中的 user 和 group
确认后,用 chown -R www-data:www-data /var/www/your-app 统一归属,这是后续权限生效的基础。
权限数字不是随意选的,它对应明确的安全意图:
立即学习“PHP免费学习笔记(深入)”;
usermod -aG www-data deployer)虽然 chmod() 可在脚本中调用,但它受制于PHP进程本身的权限上限,且易被忽略安全后果:
mkdir($path, 0755, true) 中的 true 启用递归创建,适合初始化多级目录file_put_contents() 自动创建文件,但默认权限由系统 umask 决定(常为 0022 → 实际得 644),不建议依赖chmod($file, 0644) 是稳妥做法,但绝不要对普通文件用 0777
public_html 或 htdocs)部署后快速检查是否到位:
ls -l 查看关键文件权限和所有者,确认 config.php 不是 777、uploads/ 目录属组可写echo posix_getpwuid(posix_geteuid())['name'] ?? 'unknown'; 确认当前执行用户file_put_contents('test.txt', 'ok'),失败则说明可写目录权限或归属不对config.php 应返回500或空白(被解析失败),而非显示明文内容;若看到源码,说明Web服务器未解析PHP或文件权限过松(如被设为 777 且可执行)