在 CentOS 上配置 PHP 时“权限错误”非常常见,通常不是 PHP 本身的问题,而是文件权限 / 用户身份 / SELinux三者没对齐。下面按最常见原因给你一个排查清单。
如果你用的是:
apachenginx 或 php-fpm 配置里的用户ps aux | grep php-fpm
ps aux | grep httpd
PHP-FPM 用户一般在:
/etc/php-fpm.d/www.conf
user = apache
group = apache
ls -l /var/www/html
✅ 正确示例:
drwxr-xr-x apache apache
❌ 错误示例:
drwxr-xr-x root root
chown -R apache:apache /var/www/html
chmod -R 755 /var/www/html
比如:
file_put_contents("cache/test.txt", "ok");
// Permission denied
chmod -R 777 runtime
# 或更好:
chown -R apache:apache runtime
chmod -R 755 runtime
⚠️ 不要用 777 作为长期方案
这是 CentOS 特有的坑。
getenforce
如果是 Enforcing,很可能就是它拦的。
audit2why < /var/log/audit/audit.log
# 允许 httpd 访问网站目录
chcon -R -t httpd_sys_content_t /var/www/html
# 如果是可写目录
chcon -R -t httpd_sys_rw_content_t /var/www/html/upload
或临时关闭(不推荐生产):
setenforce 0
open_basedir = /var/www/html
如果 PHP 访问了外面目录,会直接报错。
disable_functions = exec,system,passthru
listen = /run/php-fpm/www.sock
如果 Nginx 无法访问:
chown nginx:nginx /run/php-fpm/www.sock
如果你能贴出:
我可以直接帮你定位到是哪一类权限问题。