在 CentOS 上配置 PHP 权限,通常涉及 文件/目录权限、PHP-FPM 运行用户、SELinux、以及 Web 服务器(Nginx/Apache) 几个方面。下面按常见场景一步步说明。
ps aux | grep php-fpm
一般用户是:
apache(CentOS 默认 Apache)nginx(Nginx + PHP-FPM)www-data(较少见)查看配置:
vim /etc/php-fpm.d/www.conf
关注:
user = apache
group = apache
假设网站目录:
/var/www/html
chown -R apache:apache /var/www/html
(如果是 Nginx)
chown -R nginx:nginx /var/www/html
# 目录
find /var/www/html -type d -exec chmod 755 {} \;
# 文件
find /var/www/html -type f -exec chmod 644 {} \;
chmod -R 775 /var/www/html/storage
chown -R apache:apache /var/www/html/storage
CentOS 默认开启 SELinux,这是最常见“权限没问题但仍报错”的原因。
getenforce
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
常见类型:
httpd_sys_content_t:只读httpd_sys_rw_content_t:可读写httpd_log_t:日志setsebool -P httpd_unified 1
setsebool -P allow_httpd_anon_write 1
vim /etc/nginx/nginx.conf
确保:
user nginx;
vim /etc/httpd/conf/httpd.conf
User apache
Group apache
如果 PHP 上传文件后无法访问:
chmod 664 uploaded.jpg
chown apache:apache uploaded.jpg
tail -f /var/log/php-fpm/error.log
tail -f /var/log/httpd/error_log
# 或
tail -f /var/log/nginx/error.log
setenforce 0
(仅测试,不建议生产环境关闭)
chmod 777如果你能告诉我:
我可以给你更精确的权限方案。