CentOS 上 PHP 日志“不写”一般不是 PHP 本身坏了,而是配置、权限、路径或运行方式的问题。下面按最常见原因一步步排查。
PHP 在 CentOS 上常见有 三类日志:
很多人以为“PHP 没写日志”,其实写到了别的地方。
查看当前配置:
php --ini
php -i | grep error_log
重点看这几个:
log_errors = On
error_log = /var/log/php/php_errors.log
如果 log_errors = Off,永远不会写日志。
✅ 修改后重启:
systemctl restart php-fpm
例如:
error_log = /var/log/php/php_errors.log
但目录不存在:
ls -ld /var/log/php
解决:
mkdir -p /var/log/php
chown -R nginx:nginx /var/log/php # 或 apache:apache
chmod 755 /var/log/php
⚠️ PHP 是以 web 用户 身份写日志的(nginx / apache / php-fpm)
CentOS 默认开启 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
CentOS 常用:
/etc/php.ini/etc/php-fpm.d/www.confphp-fpm 可能覆盖 php.ini 的 error_log
检查:
php-fpm -i | grep error_log
或:
grep error_log /etc/php-fpm.d/www.conf
error_reporting = E_ALL
如果是:
error_reporting = E_ERROR
Notice / Warning 不会写。
Nginx 只记录:
查看:
tail -f /var/log/nginx/error.log
# 1. php 错误日志配置
php -i | grep error_log
# 2. 日志文件权限
ls -l /var/log/php
# 3. SELinux
getenforce
# 4. web 用户
ps aux | grep php-fpm
# 5. 手动测试
<?php
error_log("test php log");
你可以贴出:
error_log 相关配置我可以直接告诉你为什么没写、怎么改。