温馨提示×

PHP日志为何不写入CentOS

小樊
50
2026-08-30 08:06:03
栏目: 编程语言

CentOS 上,PHP 日志不写入通常不是代码问题,而是权限、路径或配置的问题。下面按最常见原因 → 排查步骤给你一个完整清单。


一、先确认:PHP 用的是哪套日志配置

1️⃣ 看 php.ini 路径

php --ini

php -i | grep "Loaded Configuration File"

二、最常见原因(90% 都在这里)

✅ 1. 日志目录没有写权限(最常见)

典型错误

error_log = /var/log/php_errors.log

但目录权限不足。

排查

ls -ld /var/log
ls -l /var/log/php_errors.log

解决

touch /var/log/php_errors.log
chown apache:apache /var/log/php_errors.log   # CentOS 7
# 或
chown nginx:nginx /var/log/php_errors.log     # nginx
chmod 644 /var/log/php_errors.log

Web 服务用户

  • Apache:apache
  • Nginx + PHP-FPM:apachenginx(取决于 php-fpm 配置)

查看:

ps aux | grep php-fpm

✅ 2. SELinux 阻止写入(CentOS 特有)

SELinux 是 CentOS 日志写不进的头号元凶

检查

getenforce

如果是 Enforcing,继续。

查看被拒绝的日志

tail -f /var/log/audit/audit.log

grep php /var/log/audit/audit.log

临时验证

setenforce 0

如果日志立刻能写了,说明就是 SELinux。

正确修复(推荐)

semanage fcontext -a -t httpd_log_t "/var/log/php_errors.log"
restorecon -v /var/log/php_errors.log

或允许 httpd 写日志:

setsebool -P httpd_can_network_connect 1

✅ 3. 日志路径配置错误

php.ini 关键配置

log_errors = On
error_log = /var/log/php_errors.log

检查是否:

  • 被注释
  • 路径不存在
  • 使用了相对路径

修改后必须重启:

systemctl restart php-fpm
systemctl restart httpd   # 或 nginx

✅ 4. PHP-FPM 的日志和 php.ini 不是一回事

很多人只看 php.ini,但 PHP-FPM 有自己的日志

PHP-FPM 配置

vim /etc/php-fpm.conf
# 或
vim /etc/php-fpm.d/www.conf

关键项:

catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm-error.log

否则 PHP 错误不会输出到日志


✅ 5. 错误级别设置过高

error_reporting = E_ALL
display_errors = Off
log_errors = On

如果设置成:

error_reporting = E_NONE

那就什么都不会记录。


✅ 6. Nginx 把错误吞了

Nginx 配置

fastcgi_param PHP_VALUE "log_errors=On";

或者 PHP 错误被重定向到:

error_log /var/log/nginx/error.log;

三、快速自检清单(一步步来)

✅ 1. php.ini 是否开启日志
✅ 2. 日志文件路径是否存在
✅ 3. 目录和文件权限是否正确
✅ 4. SELinux 是否拦截
✅ 5. 是否重启 php-fpm / web 服务
✅ 6. 是否查看的是正确的日志文件


四、推荐最稳妥的测试方式

测试 PHP 是否能写日志

<?php
error_log("PHP log test");

强制指定日志路径

ini_set('error_log', '/var/log/php_test.log');
error_log('test');

五、如果你愿意,我可以直接帮你定位

你可以直接贴出:

  1. CentOS 版本
  2. PHP 版本
  3. Web 服务(Apache / Nginx)
  4. php -i | grep error_log
  5. 日志目录 ls -Z(SELinux 上下文)

我可以 精确到哪一行配置打勾就能解决

0