在 Ubuntu 上 PHP 日志为空,通常不是“没出错”,而是日志根本没有配置或没写进去。下面按最常见原因逐一说明,并给出排查步骤。
检查 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
error_reporting(0);
或
error_reporting = E_ALL & ~E_NOTICE
✅ 建议开发环境:
error_reporting = E_ALL
display_errors = On
PHP 错误不会出现在 Nginx 日志里,只会在:
php-fpm.logerror_logNginx 错误日志:
tail -f /var/log/nginx/error.log
PHP-FPM 日志:
tail -f /var/log/php8.1-fpm.log
有时候:
try/catch 吃掉✅ 测试是否真的写日志:
<?php
error_log("test log");
nonexistent_function();
然后看日志文件。
检查:
/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
php -i | grep error_log # CLI
Web 中:
<?php phpinfo(); ?>
两者 Often 不同。
log_errors = Onerror_log 有值如果你愿意,可以告诉我:
我可以直接帮你定位到具体配置文件。