温馨提示×

ubuntu php日志权限问题咋解

小樊
41
2026-10-12 07:38:22
栏目: 编程语言

在 Ubuntu 上,PHP 日志写不进去 / 权限报错是很常见的问题,通常和 Web 服务用户、目录权限、SELinux/AppArmor 有关。下面按「最常见 → 进阶」给你一套排查和解决思路。


一、先确认 PHP 是以哪个用户运行的

1. 看 Web 服务类型

ps aux | grep -E 'nginx|apache|php-fpm'

常见用户:

  • Nginx + PHP-FPM:www-data
  • Apache:www-data
  • CLI 模式:你当前登录用户(如 ubuntu)

二、最常见问题:日志目录没有写权限

示例错误

failed to open stream: Permission denied

解决步骤

1. 查看日志目录

ls -ld /var/log/php
ls -l /var/log/php/php-error.log

2. 修改目录属主(推荐)

sudo chown -R www-data:www-data /var/log/php
sudo chmod 755 /var/log/php
sudo chmod 644 /var/log/php/*.log

⚠️ 不要用 777,不安全


三、PHP 配置文件路径问题

查看 PHP 错误日志配置

php -i | grep error_log

常见位置:

error_log = /var/log/php/php-error.log

修改后重启服务:

sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx

四、PHP-FPM 的 php-fpm.conf 权限坑

如果你用的是 PHP-FPM pool:

sudo vim /etc/php/8.1/fpm/pool.d/www.conf

确保:

user = www-data
group = www-data

改完:

sudo systemctl restart php8.1-fpm

五、日志目录不存在

PHP 不会自动创建目录

sudo mkdir -p /var/log/php
sudo touch /var/log/php/php-error.log
sudo chown www-data:www-data /var/log/php/php-error.log

六、AppArmor 限制(Ubuntu 特有)

Ubuntu 默认启用 AppArmor,可能阻止 PHP 写日志。

检查

sudo aa-status

临时测试(不推荐长期使用)

sudo aa-complain /etc/apparmor.d/usr.sbin.php-fpm8.1

七、CLI 和 Web 权限不一致(很容易踩)

  • Web:写 /var/log/php
  • CLI:写当前用户目录

✅ 建议统一:

error_log = /var/log/php/php-cli.log

并给权限:

sudo chown ubuntu:www-data /var/log/php
sudo chmod 775 /var/log/php

八、快速自检清单 ✅

  • [ ] PHP 运行用户确认
  • [ ] 日志目录存在
  • [ ] 目录属主正确
  • [ ] 文件权限非 777
  • [ ] PHP 配置已重启生效
  • [ ] AppArmor 未拦截

九、如果你愿意,我可以直接帮你定位

你可以贴出:

  1. PHP 报错原文
  2. php -v
  3. Web 服务(Nginx / Apache)
  4. ls -l 日志目录结果

我可以直接告诉你 改哪一行、执行哪几条命令。

0 踩