温馨提示×

为何ubuntu php日志为空

小樊
37
2026-10-06 10:36:40
栏目: 编程语言

在 Ubuntu 上 PHP 日志为空,通常不是“没出错”,而是日志根本没有配置或没写进去。下面按最常见原因逐一说明,并给出排查步骤。


一、PHP 本身没开日志(最常见)

1. php.ini 中日志被关闭

检查 php.ini(CLI 和 FPM 可能是不同文件):

php --ini

常见位置:

  • /etc/php/8.1/cli/php.ini
  • /etc/php/8.1/fpm/php.ini

查看关键配置:

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

如果:

  • log_errors = Off → 不会记录
  • error_log 为空 → 错误只会进 Web 服务器日志(如 nginx/apache)

✅ 修改后重启:

sudo systemctl restart php8.1-fpm

二、日志文件存在但权限不对

即使配置了日志文件,PHP 进程写不进去也会“静默失败”。

ls -l /var/log/php/

确保:

  • 目录存在
  • 属主是 www-data(FPM)或运行 PHP 的用户

修复示例:

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

三、你看到的是“错误级别不够”

1. 错误被屏蔽

error_reporting(0);

或

error_reporting = E_ALL & ~E_NOTICE

✅ 建议开发环境:

error_reporting = E_ALL
display_errors = On

四、Web 服务器把错误“吞了”

Nginx + PHP-FPM

PHP 错误不会出现在 Nginx 日志里,只会在:

  • php-fpm.log
  • 你配置的 error_log

Nginx 错误日志:

tail -f /var/log/nginx/error.log

PHP-FPM 日志:

tail -f /var/log/php8.1-fpm.log

五、脚本没真正出错(你以为有错)

有时候:

  • 异常被 try/catch 吃掉
  • 框架自定义了错误处理(Laravel / Symfony)

✅ 测试是否真的写日志:

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

然后看日志文件。


六、用了 php-fpm 的 pool 配置覆盖了 php.ini

检查:

/etc/php/8.1/fpm/pool.d/www.conf

可能包含:

php_admin_value[error_log] = /var/log/php-fpm.log
php_admin_flag[log_errors] = on

七、命令行和 Web 不是同一套配置(极易混淆)

php -i | grep error_log     # CLI

Web 中:

<?php phpinfo(); ?>

两者 Often 不同。


快速自查清单 ✅

  • [ ] log_errors = On
  • [ ] error_log 有值
  • [ ] 文件存在且可写
  • [ ] 重启了 php-fpm
  • [ ] 看的是正确日志文件
  • [ ] 测试代码能写日志

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

  • Ubuntu 版本
  • PHP 版本
  • Nginx / Apache
  • 是 CLI 还是 Web 页面日志为空

我可以直接帮你定位到具体配置文件。

0 踩