首先需明确PHP日志的存储路径,不同配置(如PHP-FPM、Apache/Nginx)的路径不同:
/var/log/php-fpm/
目录下(如www-error.log
、www-access.log
),可通过/etc/php-fpm.d/www.conf
中的error_log
和access_log
参数确认。/var/log/httpd/
目录下(如error_log
、access_log
)。/var/log/nginx/
目录下(如error.log
、access.log
)。ls -l /path/to/logs/
命令验证日志文件是否存在及当前权限。PHP进程(如apache
、nginx
、php-fpm
用户)需对日志文件有写入权限,同时需限制其他用户访问以避免敏感信息泄露。推荐权限设置如下:
640
(所有者可读写,所属组可读,其他用户无权限),命令示例:sudo chmod 640 /var/log/php-fpm/www-error.log
sudo chmod 640 /var/log/php-fpm/www-access.log
750
(所有者可读写执行,所属组可读执行,其他用户无权限),命令示例:sudo chmod 750 /var/log/php-fpm/
若日志目录不存在,需先创建并设置权限:
sudo mkdir -p /var/log/php
sudo chown -R apache:apache /var/log/php # 根据实际用户调整
sudo chmod -R 750 /var/log/php
日志文件的所有者需为运行PHP进程的用户(如Apache默认用apache
,Nginx默认用nginx
,PHP-FPM默认用php-fpm
或www-data
)。可通过以下命令修改:
# 查看PHP运行用户(以PHP-FPM为例)
ps aux | grep php-fpm | grep -v grep
# 输出中第一个字段即为运行用户(如www-data)
# 修改所有者(以www-data为例)
sudo chown -R www-data:www-data /var/log/php-fpm/www-error.log
sudo chown -R www-data:www-data /var/log/php-fpm/www-access.log
若使用Apache,将www-data
替换为apache
;若使用Nginx,替换为nginx
。
若系统启用了SELinux(默认开启),可能会阻止PHP进程访问日志文件。需调整SELinux上下文:
sudo yum install -y policycoreutils-python
sudo semanage fcontext -a -t var_log_t "/var/log/php(/.*)?" # 添加上下文规则
sudo restorecon -Rv /var/log/php # 应用上下文到现有文件
setenforce 0
临时关闭SELinux(重启后恢复),并配置永久策略。完成上述步骤后,需重启PHP及Web服务使更改生效:
sudo systemctl restart php-fpm
sudo systemctl restart httpd
sudo systemctl restart nginx
最后,通过tail -f /path/to/php.log
命令检查日志是否能正常写入。
777
(完全开放),这会导致安全风险。php.ini
)中的error_log
路径是否正确,以及log_errors
是否设置为On
。