在 Ubuntu 上 PHP 日志为空,通常不是“没错误”,而是日志根本没配置到文件,或者被重定向/禁用了。下面按最常见原因逐一说明,并给出排查步骤。
PHP 常见日志有 3 类,位置完全不同:
很多人看错地方,所以“日志是空的”。
检查:
php --ini
或
php -i | grep error_log
重点看:
log_errors = On
error_log = /var/log/php/php_errors.log
如果:
log_errors = Off → 不会写日志error_log = 为空 → 错误只输出到 stderr(Web 下看不到)✅ 解决:
log_errors = On
error_log = /var/log/php/php_errors.log
然后:
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
重启服务:
sudo systemctl restart apache2
# 或
sudo systemctl restart php8.1-fpm
FPM 有自己的日志:
/etc/php/8.1/fpm/php-fpm.conf
检查:
error_log = /var/log/php8.1-fpm.log
还有 pool 配置:
/etc/php/8.1/fpm/pool.d/www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
否则 PHP 错误不会进 FPM 日志。
display_errors = On
log_errors = Off
结果:
✅ 正确做法:
display_errors = Off
log_errors = On
常见于:
www-data检查:
ls -ld /var/log/php
如果不是:
sudo chown -R www-data:www-data /var/log/php
例如:
error_reporting(0);
或
@file_get_contents(...);
这会屏蔽错误,日志自然为空。
/var/log/php/...测试:
php -r 'echo $undefined;'
如果 CLI 有错误,Web 没有,说明是 Web 配置问题。
# 1. 看 PHP 用哪个 ini
php --ini
# 2. 看错误配置
php -i | grep -E "log_errors|error_log|display_errors"
# 3. 看 Web 服务日志
tail -f /var/log/apache2/error.log
tail -f /var/log/nginx/error.log
# 4. 看 PHP-FPM 日志
tail -f /var/log/php8.1-fpm.log
log_errors = On
error_log = /var/log/php/php_errors.log
display_errors = Off
error_reporting = E_ALL
如果你愿意,可以告诉我:
我可以直接帮你定位是哪一条导致的。