在 CentOS 上设置 PHP 权限,关键取决于 PHP 的运行方式(Apache / PHP-FPM / Nginx) 和 网站目录的归属。下面按常见场景一步步说明。
ps aux | grep httpd
PHP 作为 Apache 模块运行,用户通常是:
ps aux | grep php-fpm
常见用户:
CentOS 常见默认用户:
user = apache
group = apache
假设你的网站目录是:
/var/www/html
chown -R apache:apache /var/www/html
如果你用 Nginx,但 PHP-FPM 是 apache 用户,也要用
apache
chmod -R 755 /var/www/html
chmod -R 777 /var/www/html/uploads
或更安全:
chmod -R 775 /var/www/html/uploads
chown -R apache:apache /var/www/html/uploads
CentOS 默认开启 SELinux,这是 PHP 没权限的最常见原因。
getenforce
Enforcing ✅(需要配置)Permissive ⚠️(临时关闭)Disabled ❌(不推荐)semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
需要写入的目录:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
restorecon -Rv /var/www/html/uploads
setsebool -P httpd_can_network_connect on
file_uploads = On
upload_max_filesize = 20M
post_max_size = 20M
upload_tmp_dir = /tmp
确保:
chown apache:apache /tmp
新建测试文件:
<?php
echo exec('whoami');
访问页面,确认 PHP 运行用户。
| 问题 | 原因 | 解决 |
|---|---|---|
| 无写入权限 | 目录属主不对 | chown |
| 403 Forbidden | SELinux | restorecon |
| 上传失败 | tmp 权限 | chown /tmp |
| Nginx 正常但 PHP 不行 | PHP-FPM 用户错 | 检查 php-fpm.d/www.conf |
chown -R apache:apache /var/www/html
chmod -R 755 /var/www/html
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
如果你愿意,可以告诉我:
我可以给你 精确到命令级别 的设置方案。