温馨提示×

ubuntu php日志为何不写

小樊
41
2026-09-12 09:45:32
栏目: 编程语言

在 Ubuntu 上 PHP 日志“不写”通常是配置、权限或运行方式导致的。下面按最常见原因逐一排查,你可以对照看。


一、先确认 PHP 日志写在哪里

1️⃣ 查看 php.ini 配置

php --ini

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

关键三项:

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

⚠️ 如果 error_log 没设置,PHP 会交给 SAPI(如 nginx / apache)处理。


二、Web 环境(PHP-FPM / Nginx / Apache)

2️⃣ PHP-FPM 的日志是分开的

PHP-FPM 不会写 php.ini 里的 error_log

查看:

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

找到:

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

否则错误只会出现在:

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

3️⃣ 日志目录权限问题(最常见)

ls -ld /var/log/php

如果目录不存在或权限不对:

sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php
sudo chmod 755 /var/log/php

然后:

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

三、错误级别太低,不记录

4️⃣ error_reporting 屏蔽了

error_reporting = E_ALL

或在代码里:

error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);

四、用了 try/catch 或 @ 抑制错误

@file_get_contents('x'); // 不写日志

@ 会抑制错误日志。


五、CLI 和 Web 日志不一样

CLI 模式:

php script.php

读的是:

/etc/php/8.1/cli/php.ini

Web 模式:

/etc/php/8.1/fpm/php.ini

✅ 两者配置可能完全不同


六、Nginx / Apache 没转发错误

Nginx

fastcgi_intercept_errors on;

否则 PHP 错误不会进 nginx 日志


七、快速验证是否真不写

<?php
error_log("TEST PHP LOG");

然后:

tail -f /var/log/php/php_errors.log

八、常见总结表

原因 解决
error_log 未设置 设置路径
目录无权限 chown www-data
PHP-FPM 不读 php.ini 改 pool 配置
@ 抑制 去掉
CLI / FPM 混用 分清 ini
没重启 systemctl restart php8.1-fpm

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

  • Ubuntu 版本
  • PHP 版本
  • Nginx / Apache
  • CLI 还是 Web

我可以直接给你精确配置文件内容。

0 踩