在 Ubuntu 上 PHP 日志为空,通常不是“没出错”,而是日志根本没写对地方,或被配置关掉了。下面按最常见原因逐一说明,并给出排查方法。
不同方式,日志位置完全不同:
php script.phplog_errors 被关闭PHP 默认可能不会写日志。
检查:
php -i | grep log_errors
如果看到:
log_errors => Off
修改 php.ini:
log_errors = On
error_log = /var/log/php/php_errors.log
重启服务:
# Apache
sudo systemctl restart apache2
# PHP-FPM
sudo systemctl restart php8.1-fpm
error_log 路径不存在或不可写例如:
error_log = /var/log/php/errors.log
但目录不存在。
解决:
sudo mkdir -p /var/log/php
sudo chown www-data:www-data /var/log/php
PHP-FPM 有自己的日志,不在 php.ini 里。
查看:
sudo tail -f /var/log/php8.1-fpm.log
或在 pool 配置中:
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php/fpm-error.log
php_admin_value[log_errors] = On
error_reporting = E_ALL
display_errors = Off
Nginx 不显示 PHP 错误,只报 500。
检查:
sudo tail -f /var/log/nginx/error.log
@ 抑制错误@file_get_contents('xxx');
这种错误 不会写日志。
日志为空 ≠ 有问题
可以故意测试:
<?php
error_log("test log");
nonexistent_function();
php -i | grep -E "error_log|log_errors|error_reporting"
ls -l /var/log/php
sudo tail -f /var/log/php/*.log
如果你愿意,可以告诉我:
我可以直接帮你定位是哪一层的问题。