“Ubuntu 上 PHP 日志为何出错”这个现象比较宽泛,通常不是 PHP 本身出错,而是日志配置或运行环境的问题。下面我按常见原因 + 排查方法给你说明,你可以对照看是哪一种。
这是最常见原因。
典型报错类似:
Failed to open stream: Permission denied
或
log file xxx not writable
原因:
php.ini 里配置了 error_log,但目录不存在✅ 检查:
php -i | grep error_log
ls -ld /var/log/php
✅ 解决:
sudo mkdir -p /var/log/php
sudo chown -R www-data:www-data /var/log/php
sudo chmod 755 /var/log/php
你可能把错误“关掉了”,看起来像“日志出错”。
error_reporting = E_ALL
display_errors = Off
log_errors = On
如果 log_errors = Off,错误不会写日志。
✅ 检查:
php -i | grep log_errors
Ubuntu 常有多版本 PHP(7.4 / 8.1 / 8.2)。
你可能改了 A 版本的 php.ini,但 Web 用的是 B 版本。
✅ 查看实际使用的 PHP:
php -v
php -i | grep "Loaded Configuration File"
Apache / Nginx 也可能用不同版本。
很多人以为是 PHP 日志出错,其实是:
/var/log/nginx/error.log/var/log/apache2/error.logPHP 错误常写在这里。
✅ 查看:
sudo tail -f /var/log/nginx/error.log
如果你用 PHP-FPM:
catch_workers_output = yes
否则 PHP 报错不会进日志。
✅ 配置文件位置:
/etc/php/8.1/fpm/pool.d/www.conf
Ubuntu 默认是 AppArmor。
✅ 查看:
sudo aa-status
# 1. PHP 版本
php -v
# 2. 当前 php.ini
php --ini
# 3. 错误日志设置
php -i | grep -E "error_log|log_errors|error_reporting"
# 4. Web 服务日志
sudo tail -n 50 /var/log/nginx/error.log
# 或
sudo tail -n 50 /var/log/apache2/error.log
你可以直接贴出:
我可以一步一步帮你定位到哪一行配置错了。