温馨提示×

ubuntu php日志为何为空

小樊
36
2026-09-12 09:39:33
栏目: 编程语言

在 Ubuntu 上 PHP 日志为空,通常不是“没错误”,而是日志根本没配置到文件,或者被重定向/禁用了。下面按最常见原因逐一说明,并给出排查步骤。


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

PHP 常见日志有 3 类,位置完全不同:

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

很多人看错地方,所以“日志是空的”。


二、最常见原因 & 解决办法

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

检查:

php --ini

php -i | grep error_log

重点看:

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

如果:

  • log_errors = Off → 不会写日志
  • error_log = 为空 → 错误只输出到 stderr(Web 下看不到)

✅ 解决:

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

然后:

sudo mkdir -p /var/log/php
sudo touch /var/log/php/php_errors.log
sudo chown www-data:www-data /var/log/php/php_errors.log

重启服务:

sudo systemctl restart apache2
# 或
sudo systemctl restart php8.1-fpm

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

FPM 有自己的日志:

/etc/php/8.1/fpm/php-fpm.conf

检查:

error_log = /var/log/php8.1-fpm.log

还有 pool 配置:

/etc/php/8.1/fpm/pool.d/www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log

否则 PHP 错误不会进 FPM 日志


3️⃣ 错误被 display_errors 吞掉了(只显示不记录)

display_errors = On
log_errors = Off

结果:

  • 浏览器能看到错误
  • 日志文件为空 ✅

✅ 正确做法:

display_errors = Off
log_errors = On

4️⃣ Web 服务器没权限写日志

常见于:

  • 日志目录不存在
  • 属主不是 www-data

检查:

ls -ld /var/log/php

如果不是:

sudo chown -R www-data:www-data /var/log/php

5️⃣ 代码里有“静默失败”

例如:

error_reporting(0);

@file_get_contents(...);

这会屏蔽错误,日志自然为空。


6️⃣ 你访问的是 CLI,不是 Web

  • Web 错误 → /var/log/php/...
  • CLI 错误 → 直接输出到终端

测试:

php -r 'echo $undefined;'

如果 CLI 有错误,Web 没有,说明是 Web 配置问题


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

# 1. 看 PHP 用哪个 ini
php --ini

# 2. 看错误配置
php -i | grep -E "log_errors|error_log|display_errors"

# 3. 看 Web 服务日志
tail -f /var/log/apache2/error.log
tail -f /var/log/nginx/error.log

# 4. 看 PHP-FPM 日志
tail -f /var/log/php8.1-fpm.log

四、最小可用配置(推荐)

log_errors = On
error_log = /var/log/php/php_errors.log
display_errors = Off
error_reporting = E_ALL

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • PHP 版本
  • Apache 还是 Nginx
  • CLI 还是 Web 场景

我可以直接帮你定位是哪一条导致的。

0