温馨提示×

为何ubuntu php日志不写

小樊
37
2026-10-21 00:36:31
栏目: 编程语言

Ubuntu 上 PHP 日志“不写”是一个很常见的问题,通常不是 PHP 本身坏了,而是配置、权限或运行方式导致的。下面按最常见原因逐个排查。


一、先确认:你说的是哪种“日志不写”

PHP 常见日志有三类:

  1. PHP 错误日志(php.ini 中配置)
  2. Web 服务器错误日志(Apache / Nginx)
  3. 应用自己写的日志(如 file_put_contents()、error_log())

不同类型排查方式不同。


二、PHP 错误日志不写(最常见)

1. 检查 php.ini 配置

php --ini

查看:

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

⚠️ 注意:

  • log_errors 必须是 On
  • error_log 如果为空 → 日志会写到 Web 服务器日志
  • CLI 和 FPM 用的 php.ini 不是同一个

查看实际生效配置

php -i | grep error_log

或(FPM):

php-fpm -i | grep error_log

2. 日志文件不存在或权限不足(高频原因)

例如:

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

但:

ls -l /var/log/php/

如果目录不存在或 www-data 无写权限:

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

Ubuntu 下 PHP 通常以 www-data 运行


3. 你改了 php.ini 但没重启

Apache:

sudo systemctl restart apache2

Nginx + PHP-FPM:

sudo systemctl restart php8.1-fpm

(版本号按实际)


三、Apache / Nginx 日志里“没看到 PHP 错误”

1. PHP 错误被 Web 服务器接管

如果没有设置 error_log,PHP 错误会写到:

  • Apache:/var/log/apache2/error.log
  • Nginx:/var/log/nginx/error.log

检查:

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

2. display_errors 开着,但 log 没开

display_errors = On
log_errors = Off

→ 页面能看到错误,但日志不写


四、CLI 模式“不写日志”

CLI 和 Web 是两套环境:

php -i | grep error_log

CLI 默认:

error_log =

→ 写到 stderr(终端)


五、应用日志不写(file_put_contents / error_log)

1. 目录没权限

file_put_contents('/var/www/app/log.txt', 'test');

如果:

  • 目录不存在
  • www-data 无写权限

→ 静默失败

2. 路径是相对路径

file_put_contents('log.txt', 'x');

实际路径可能是:

/var/www/html/log.txt

六、快速自检清单 ✅

# 1. 找 php.ini
php --ini

# 2. 看错误配置
grep -E "log_errors|error_log" /etc/php/*/fpm/php.ini

# 3. 测试写日志
php -r "error_log('test log');"

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

七、如果你愿意,我可以更精确帮你

你可以告诉我:

  1. Ubuntu 版本
  2. PHP 版本(php -v)
  3. Web 服务(Apache / Nginx)
  4. 是 错误日志 还是 业务日志
  5. php.ini 中 error_log 的值

我可以直接帮你指出“哪一行配置错了”。

0 踩