温馨提示×

ubuntu php日志为空为啥

小樊
40
2026-09-30 15:09:40
栏目: 编程语言

在 Ubuntu 上 PHP 日志为空,通常不是“没出错”,而是日志根本没配置输出到你认为的地方。下面按最常见原因逐一说明,你可以对照排查。


一、PHP 错误日志没开启(最常见)

1. php.ini 中关闭了日志

检查:

php --ini

编辑对应 php.ini(如 /etc/php/8.1/cli/php.ini 或 fpm/php.ini)

确认以下配置:

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

如果:

  • log_errors = Off → 日志永远为空
  • error_log 没设置 → 错误可能进 syslog,而不是文件

改完重启:

sudo systemctl restart php8.1-fpm
# 或 apache / nginx

二、Web 和 CLI 用的是不同 php.ini

非常容易踩坑:

  • 浏览器访问 PHP → 用 FPM / Apache 的 php.ini
  • 命令行 php test.php → 用 CLI 的 php.ini

检查:

php -i | grep error_log

和

php-fpm -i | grep error_log

两者可能完全不同。


三、日志文件不存在或权限不对

例如:

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

但文件不存在或 PHP 用户无写权限:

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

(用户可能是 www-data、nginx、php-fpm)


四、错误级别太低,没记录

error_reporting = E_ALL

如果设置成:

error_reporting = E_ERROR

那 notice / warning 都不会写日志。


五、错误被框架“吞掉”了

如果你用的是:

  • Laravel
  • ThinkPHP
  • Symfony

它们通常:

  • 自己捕获异常
  • 写自己的日志(如 storage/logs/laravel.log)

PHP 本身日志可能就是空的。


六、Nginx / Apache 没把错误转给 PHP

Nginx 示例

fastcgi_param PHP_VALUE "log_errors=On";

否则 FPM 可能用默认配置。


七、确实没错误(不是日志问题)

你可以强制测试:

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

如果还是空,说明配置没生效。


快速自查清单 ✅

# 1. 看 PHP 错误配置
php -i | grep -E "log_errors|error_log|error_reporting"

# 2. 看日志文件
ls -l /var/log/php/

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

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

  • Ubuntu 版本
  • PHP 版本
  • 用 Nginx 还是 Apache
  • CLI 还是网页访问

我可以帮你精确定位是哪一层的问题。

0 踩