Ubuntu系统中,PHP(尤其是PHP-FPM)通常以www-data用户和组运行。需检查配置文件确认:
/etc/php/{版本号}/fpm/pool.d/www.conf(如/etc/php/8.1/fpm/pool.d/www.conf),找到user和group项,确保值为www-data;/etc/apache2/envvars,确认export APACHE_RUN_USER=www-data和export APACHE_RUN_GROUP=www-data。日志文件(如/var/log/apache2/error.log、/var/log/php-fpm.log或自定义路径)的所有者需为www-data,权限需允许所有者写入:
sudo chown www-data:www-data /path/to/logfile.log(替换为实际日志路径);sudo chmod 660 /path/to/logfile.log(所有者与组可读写,其他用户无权限);/var/log/php-fpm):sudo chmod 755 /path/to/log/directory(确保web进程可进入目录)。日志文件所在目录需允许PHP进程(www-data)写入。例如,若日志存放在/var/log/myapp/,需执行:
sudo chown -R www-data:www-data /var/log/myapp/ # 递归修改所有者
sudo chmod -R 755 /var/log/myapp/ # 递归设置目录权限
避免目录权限过严(如700)导致无法写入。
确保PHP配置文件(php.ini)中日志路径正确且可写:
php.ini:php --ini(显示路径,如/etc/php/8.1/apache2/php.ini);error_reporting = E_ALL
log_errors = On
error_log = /var/log/apache2/php_errors.log # 确保路径存在且符合上述权限设置
sudo systemctl restart apache2(Apache)或sudo systemctl restart php8.1-fpm(PHP-FPM)。若使用PHP-FPM,需单独配置其日志文件:
/etc/php/{版本号}/fpm/php-fpm.conf,取消error_log和access_log的注释(删除行首分号),设置正确路径;sudo mkdir -p /var/log/php-fpm
sudo chown www-data:www-data /var/log/php-fpm
sudo systemctl restart php{版本号}-fpm
若系统启用SELinux或AppArmor,可能阻止日志写入:
sudo setenforce 0,永久禁用需编辑/etc/selinux/config(将SELINUX=enforcing改为disabled);sudo aa-disable /etc/apparmor.d/usr.sbin/php-fpm{版本号}(如/etc/apparmor.d/usr.sbin/php-fpm8.1)。完成上述步骤后,PHP日志应能正常写入。若问题仍存在,可通过tail -f /var/log/syslog或journalctl -xe查看系统日志,定位具体错误原因。