在 CentOS 上,PHP 日志的权限问题通常分三种情况:
1)PHP 错误日志(php-fpm / cli)
2)Web 服务(Nginx / Apache)写入的日志
3)日志目录本身的权限和 SELinux
下面按常见场景说明。
php --ini
或
php -i | grep error_log
常见配置(php.ini):
log_errors = On
error_log = /var/log/php/php-error.log
mkdir -p /var/log/php
PHP 是以什么用户运行的,日志就要给该用户写权限
查看运行用户:
grep -E "user|group" /etc/php-fpm.d/www.conf
通常是:
user = nginx
group = nginx
或
user = apache
授权:
chown -R nginx:nginx /var/log/php
chmod 750 /var/log/php
touch /var/log/php/php-error.log
chown nginx:nginx /var/log/php/php-error.log
chmod 640 /var/log/php/php-error.log
nginxnginx(或 apache)确保:
chown nginx:nginx /var/log/php/*.log
chown apache:apache /var/log/php/*.log
即使权限对了,SELinux 也可能阻止写日志。
ausearch -m avc -ts recent
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
或临时测试(不推荐长期):
setenforce 0
如果是命令行 PHP:
php /script.php
运行用户是你当前用户(如 root 或 www)
日志权限:
chown 当前用户:当前用户 /var/log/php/php-cli.log
| 对象 | 权限 | 属主 |
|---|---|---|
| 日志目录 | 750 | php用户:php用户 |
| 日志文件 | 640 | php用户:php用户 |
| SELinux | httpd_log_t | ✅ |
# 查看 php 运行用户
ps aux | grep php-fpm
# 测试写日志
sudo -u nginx touch /var/log/php/test.log
# 查看权限
ls -l /var/log/php
如果你能贴出:
我可以给你精确到命令的权限配置。