在 CentOS 上,PHP 日志(如 PHP error log、PHP-FPM 日志、应用日志)经常出现权限不足、写不进、被 SELinux 拦截等问题。下面按常见原因 → 解决办法来说明。
php --ini
常见位置:
/var/log/php-fpm/error.log/var/log/php-fpm/www-error.logerror_log = /path/to/php.logps aux | grep php-fpm
常见用户:
apache(httpd)nginxphp-fpmFailed to open stream: Permission denied
假设日志文件是 /var/log/php/php.log
# 修改所有者为 PHP 运行用户
chown nginx:nginx /var/log/php/php.log
# 或 apache
chown apache:apache /var/log/php/php.log
# 设置权限
chmod 644 /var/log/php/php.log
如果是目录:
chown -R nginx:nginx /var/log/php
chmod 755 /var/log/php
/etc/php-fpm.d/www.conf
检查:
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_value[log_errors] = On
重启:
systemctl restart php-fpm
getenforce
如果是 Enforcing,很可能是它的问题。
ausearch -m avc -ts recent
setenforce 0
给日志目录设置正确的 SELinux 类型:
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
如果是自定义路径:
chcon -R -t httpd_log_t /data/logs/php
例如:
file_put_contents('/var/log/app.log', $msg, FILE_APPEND);
解决:
mkdir -p /var/log/app
chown nginx:nginx /var/log/app
chmod 755 /var/log/app
✅ 日志目录单独建
✅ 不放在 /home、/root
✅ 不给 777
✅ 配合 SELinux
示例:
/var/log/php/
├── php-fpm.log
├── app.log
# 1. 看 PHP 用户
ps aux | grep php-fpm
# 2. 看日志权限
ls -l /var/log/php
# 3. 看 SELinux
getenforce
ausearch -m avc
# 4. 看 PHP 配置
php --ini
如果你愿意,可以告诉我:
我可以直接帮你给一套精准命令。