在 CentOS 上遇到 PHP 日志不更新,通常不是 PHP 本身“坏了”,而是日志路径、权限、进程或配置的问题。下面按最常见原因 → 排查方法 → 解决方案给你一个系统性的排查清单。
常见有 3 类:
不同日志,排查方式不同。
现象
原因
display_errors 开启log_errors 没有开启检查
php -i | grep -E "log_errors|error_reporting|display_errors"
正确配置示例(php.ini)
log_errors = On
error_reporting = E_ALL
display_errors = Off
error_log = /var/log/php/php_error.log
✅ 修改后必须重启 PHP-FPM:
systemctl restart php-fpm
CentOS 常见路径
/etc/php-fpm.conf
/etc/php-fpm.d/www.conf
检查
grep error_log /etc/php-fpm.conf
grep error_log /etc/php-fpm.d/www.conf
示例
error_log = /var/log/php-fpm/error.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
✅ 修改后重启:
systemctl restart php-fpm
现象
检查
ls -ld /var/log/php
ls -l /var/log/php/php_error.log
修复权限
mkdir -p /var/log/php
chown -R apache:apache /var/log/php # Apache
# 或
chown -R nginx:nginx /var/log/php # Nginx
chmod 755 /var/log/php
⚠️ 注意:
CentOS 默认 SELinux 可能阻止写日志
检查 SELinux 状态
getenforce
如果是 Enforcing,继续排查:
ls -Z /var/log/php
临时验证
setenforce 0
如果日志立刻开始更新,说明就是 SELinux 问题。
正确做法(不关 SELinux)
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
确认 PHP-FPM 是否真的重启
systemctl status php-fpm
ps aux | grep php-fpm
✅ 一定要重启:
systemctl restart php-fpm
www.conf 中的配置会覆盖 php.ini
检查
php_admin_value[error_log]
php_admin_flag[log_errors]
如果有,以 www.conf 为准。
查看系统日志
journalctl -u php-fpm
或:
/var/log/messages
error_log("test log");
或:
ini_set('error_log', '/tmp/php_test.log');
error_log("test");
如果 /tmp/php_test.log 有内容,说明:
✅ PHP 能写日志
❌ 原路径/权限/SELinux 有问题
log_errors = On
error_reporting = E_ALL
error_log = /var/log/php/php_error.log
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_value[log_errors] = On
chown -R nginx:nginx /var/log/php
你可以直接贴出:
php -i | grep error_log我可以直接帮你判断是 哪一条原因,并给你一条可执行的修复命令。