在 CentOS 上,PHP 日志变得超大(几个 G 甚至几十 G)通常不是 PHP 本身的 bug,而是配置或使用方式问题。下面按常见原因从高到低给你梳理,并给出对应解决办法。
php.ini 中:
log_errors = On
error_reporting = E_ALL
如果程序有大量 Notice / Warning / Deprecated,会持续写入日志。
✅ 解决:
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
或生产环境:
error_reporting = E_ERROR | E_WARNING
CentOS 默认用 logrotate,但如果:
error_log = /var/log/php/php_errors.log)日志就会一直变大。
✅ 检查:
ls -lh /var/log/php*
cat /etc/logrotate.d/php*
✅ 示例 logrotate:
/var/log/php/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 apache apache
sharedscripts
postrotate
systemctl reload php-fpm > /dev/null 2>&1 || true
endscript
}
www.conf:
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 1s
如果有很多慢请求,日志会爆炸。
✅ 解决:
错误示例:
error_log(print_r($_REQUEST, true));
高并发下,日志瞬间爆。
✅ 解决:
例如:
while (true) {
error_log("debug");
}
✅ 解决:
try {
...
} catch (Exception $e) {
error_log($e);
}
在循环中会疯狂写。
某些程序把日志写到:
/var/log/php_errors.log
但权限不足,PHP 反复尝试写,产生大量错误。
# 查看日志大小
du -sh /var/log/php*
# 看最后内容
tail -n 100 /var/log/php/php_errors.log
# 统计错误类型
grep -oE "PHP (Notice|Warning|Error|Fatal)" /var/log/php/php_errors.log | sort | uniq -c
log_errors = On
error_log = /var/log/php/php_errors.log
error_reporting = E_ERROR | E_WARNING
并:
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一类问题。