在 Ubuntu 上 PHP 日志为空,通常不是“没出错”,而是日志根本没配置输出到你认为的地方。下面按最常见原因逐一说明,你可以对照排查。
检查:
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
非常容易踩坑:
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 都不会写日志。
如果你用的是:
它们通常:
storage/logs/laravel.log)PHP 本身日志可能就是空的。
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
如果你愿意,可以告诉我:
我可以帮你精确定位是哪一层的问题。