在 Ubuntu 上,PHP 日志常见的权限问题通常出现在 PHP-FPM / Apache + PHP 写入 error_log 或自定义日志文件时。下面按常见场景给你一套排查与解决思路。
Permission deniedfailed to open stream: Permission deniedps aux | grep php-fpm
通常是:
www-data查看具体配置:
grep -R "user" /etc/php/*/fpm/pool.d/
ps aux | grep apache
一般也是 www-data
sudo mkdir -p /var/log/php
sudo chown -R www-data:www-data /var/log/php
sudo chmod 755 /var/log/php
sudo touch /var/log/php/php-error.log
sudo chown www-data:www-data /var/log/php/php-error.log
sudo chmod 644 /var/log/php/php-error.log
log_errors = On
error_log = /var/log/php/php-error.log
重启服务:
sudo systemctl restart php8.1-fpm
sudo systemctl restart apache2
Ubuntu 默认 AppArmor 可能限制 PHP 写日志。
sudo aa-status
sudo systemctl stop apparmor
在 AppArmor 配置中允许日志路径(较复杂,一般本地环境可忽略)
# 错误示例
sudo touch /var/www/html/app.log
# PHP 是 www-data,写不了
✅ 正确:
sudo chown www-data:www-data /var/www/html/app.log
chmod 775 storage/logs
chown -R www-data:www-data storage
namei -l /var/log/php/php-error.log
可一眼看出哪一级目录权限不对。
如果你能贴出:
我可以直接帮你给出「精确修复命令」。