PHP 日志在 CentOS 上报错,通常不是“PHP 本身坏了”,而是环境配置、权限或路径问题导致的。下面我按最常见原因 → 排查方法 → 解决方案给你系统梳理一下。
PHP 尝试写日志到一个不存在的目录。
典型报错:
Warning: error_log(): failed to open stream: No such file or directory
原因:
php.ini 中配置了:error_log = /var/log/php/php_error.log
但 /var/log/php/ 目录不存在。
✅ 解决:
mkdir -p /var/log/php
chown -R apache:apache /var/log/php # Apache
# 或
chown -R nginx:nginx /var/log/php # Nginx + php-fpm
目录存在,但 PHP 进程用户无权写入。
原因:
apacheapache / nginx / www-data✅ 解决:
chmod 755 /var/log/php
chown -R apache:apache /var/log/php
CentOS 默认开启 SELinux,这是最容易忽略的一点。
判断方法:
getenforce
如果是 Enforcing,非常可能是 SELinux 问题。
✅ 临时验证:
setenforce 0
如果日志立刻正常,说明就是 SELinux。
✅ 正确解决方式(推荐):
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
你改的是 CLI 的 php.ini,但 Web 用的是 PHP-FPM 的配置。
✅ 检查当前生效的配置:
phpinfo();
✅ 查看 PHP-FPM 配置文件路径:
php-fpm -i | grep "Loaded Configuration File"
一般是:
/etc/php-fpm.d/www.conf
/etc/php.ini
✅ 解决:
确认 php-fpm 使用的 error_log 路径一致。
log_errors = Off
✅ 正确配置:
log_errors = On
error_log = /var/log/php/php_error.log
然后重启:
systemctl restart php-fpm
systemctl restart httpd # 或 nginx
df -h
如果 /var 或 / 满了,日志无法写入。
✅ 解决:
# 1️⃣ 查看 PHP 报错
phpinfo();
# 2️⃣ 查看 PHP-FPM 日志
tail -f /var/log/php-fpm/error.log
# 3️⃣ 查看 Apache / Nginx 日志
tail -f /var/log/httpd/error_log
tail -f /var/log/nginx/error.log
# 4️⃣ 确认 SELinux
getenforce
log_errors = On
error_reporting = E_ALL
error_log = /var/log/php/php_error.log
mkdir -p /var/log/php
chown -R apache:apache /var/log/php
chmod 755 /var/log/php
你可以直接贴出:
php -v我可以精准定位是哪一条原因,并给你一条命令级别解决方案。