在 CentOS 上设置 PHP 权限,通常要围绕 用户、目录权限、SELinux、Nginx/Apache 来配置。下面按常见场景系统说明。
ps aux | grep httpd
通常:
apacheps aux | grep php-fpm
通常:
apache 或 nginx(取决于 php-fpm 配置)查看 php-fpm 配置:
cat /etc/php-fpm.d/www.conf | grep -E '^user|^group'
默认常见:
user = apache
group = apache
✅ PHP 以哪个用户运行,就必须给该用户目录权限
假设网站目录:
/var/www/html
# 设置目录所有者
chown -R apache:apache /var/www/html
# 目录权限
find /var/www/html -type d -exec chmod 755 {} \;
# 文件权限
find /var/www/html -type f -exec chmod 644 {} \;
如 uploads、runtime、cache 等需要写权限:
chown -R apache:apache /var/www/html/uploads
chmod -R 755 /var/www/html/uploads
如果仍然无法写入:
chmod -R 777 /var/www/html/uploads
⚠️ 不推荐长期使用 777,仅用于排查问题
CentOS 默认开启 SELinux,这是 最常见“权限没问题但仍报错”的原因。
getenforce
Enforcing ✅ 开启Permissive / Disabled ❌ 关闭chcon -R -t httpd_sys_rw_content_t /var/www/html/uploads
chcon -R -t httpd_sys_content_t /var/www/html
setenforce 0
永久关闭(不推荐):
vi /etc/selinux/config
SELINUX=disabled
file_put_contents('/var/www/html/test.txt', 'hello');
若报:
Permission denied
排查顺序:
chown 是否正确chmod 是否正确php -i | grep disable_functions
disable_functions =
| 问题 | 原因 |
|---|---|
| PHP 无法写文件 | 目录权限 / SELinux |
| 上传失败 | uploads 目录 |
| 访问 403 | 目录无执行权限 |
| 执行 exec 无反应 | disable_functions |
| Nginx 502 | php-fpm 用户不匹配 |
chown -R apache:apache /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
写目录单独设置:
chown -R apache:apache uploads
chmod 755 uploads
如果你愿意,可以告诉我:
我可以帮你 精确给出一套权限方案 ✅