温馨提示×

centos php日志为啥不写

小樊
52
2026-10-06 01:28:29
栏目: 编程语言

CentOS 上 PHP 日志“不写”一般不是 PHP 本身坏了,而是配置、权限、路径或运行方式的问题。下面按最常见原因一步步排查。


一、先确认你看的是哪个“日志”

PHP 在 CentOS 上常见有 三类日志:

  1. PHP 错误日志(php.ini 控制)
  2. Web 服务器错误日志(nginx / Apache)
  3. PHP-FPM 日志

很多人以为“PHP 没写日志”,其实写到了别的地方。


二、PHP 错误日志不写的常见原因

1️⃣ php.ini 没开启错误日志

查看当前配置:

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

2️⃣ 日志路径不存在或权限不对(最常见)

例如:

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)


3️⃣ SELinux 阻止写日志(CentOS 特有问题)

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

4️⃣ 用的是 php-fpm,但配置在 wrong 地方

CentOS 常用:

  • /etc/php.ini
  • /etc/php-fpm.d/www.conf

php-fpm 可能覆盖 php.ini 的 error_log

检查:

php-fpm -i | grep error_log

或:

grep error_log /etc/php-fpm.d/www.conf

5️⃣ 错误级别太低,没触发

error_reporting = E_ALL

如果是:

error_reporting = E_ERROR

Notice / Warning 不会写。


三、Nginx + PHP 不写日志的特殊情况

Nginx 错误日志 ≠ PHP 错误

Nginx 只记录:

  • 500 错误
  • fastcgi 错误

查看:

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");

五、如果你愿意,我可以更精确帮你

你可以贴出:

  • CentOS 版本
  • PHP 版本
  • 用的 Nginx 还是 Apache
  • php.ini 中 error_log 相关配置
  • 日志目录和权限

我可以直接告诉你为什么没写、怎么改。

0 踩