温馨提示×

centos php日志为什么空

小樊
55
2026-10-11 22:57:16
栏目: 编程语言

CentOS 上 PHP 日志为空,通常不是“没报错”,而是日志根本没配置到你能看到的地方,或者错误被抑制/没触发。下面按最常见原因逐一说明和对症排查。


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

PHP 在 CentOS 上常见的有 3 类日志:

  1. PHP 错误日志(php.ini 里配置)
  2. Web 服务器错误日志(Apache / Nginx)
  3. PHP-FPM 日志(用 PHP-FPM 时)

很多人只看 /var/log/php_errors.log,但其实根本没启用。


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

1️⃣ php.ini 没开错误日志(最常见)

检查:

php --ini

看 php.ini 里是否这样:

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

如果:

log_errors = Off

或

error_log =

那 日志一定为空。

✅ 解决:

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

然后:

touch /var/log/php_errors.log
chown apache:apache /var/log/php_errors.log
systemctl restart php-fpm httpd

2️⃣ 用的是 PHP-FPM,但日志写在 FPM 配置里

CentOS 常见:

  • Apache + mod_php
  • 或 Nginx + PHP-FPM

如果是 PHP-FPM:

vi /etc/php-fpm.d/www.conf

确认:

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

否则 PHP 错误不会写日志。


3️⃣ display_errors 开着,但 log 没开

很多开发环境:

display_errors = On
log_errors = Off

结果:

  • 浏览器能看到错误
  • 日志文件永远是空的

4️⃣ 错误级别太低(什么都没记)

error_reporting = E_ALL

如果设置成:

error_reporting = E_ERROR

很多 warning / notice 就不会记录。


5️⃣ 文件权限问题(日志写不进去)

即使配置对了,也可能:

ls -l /var/log/php_errors.log

如果属主不是 apache / nginx / php-fpm 用户,就写不进去。


6️⃣ 代码里抑制了错误

例如:

@file_get_contents('xxx');

或:

error_reporting(0);

这种 不会写日志。


7️⃣ 根本没发生“需要记录的错”

比如:

  • 页面正常访问
  • 没有 fatal error
  • 没有 warning

那日志为空是正常的


三、快速自查清单(照着做)

# 1. 当前 PHP 配置
php -i | grep error_log
php -i | grep log_errors

# 2. 测试写日志
<?php
error_log("TEST PHP LOG");
?>

# 3. 看日志
tail -f /var/log/php_errors.log

如果连 TEST PHP LOG 都不出现,说明配置或权限问题。


四、CentOS 常见正确示例(推荐)

Apache + PHP

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

Nginx + PHP-FPM

; php.ini
log_errors = On

; www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On

五、你可以直接告诉我

如果你愿意,我可以精准定位,只需要你贴:

  1. CentOS 版本
  2. Apache 还是 Nginx
  3. php -v
  4. php --ini
  5. 你当前看的日志路径

我可以直接告诉你“为什么是空的”。

0 踩