在 CentOS 上 PHP 日志“丢失”或“看不到”,通常不是真的被删了,而是配置、权限、服务方式、或日志轮转导致的。下面按最常见原因给你梳理一下。
PHP 本身不强制写日志文件,是否记录、写哪里,取决于:
php.ini 配置关键参数:
log_errors = On
error_log = /var/log/php_errors.log
常见情况:
log_errors = Off → 不记录error_log 没设 → 交给 SAPI(如 Apache / php-fpm)error_log 设了但文件不存在 → 可能写不进去✅ 检查:
php --ini
php -i | grep error_log
日志在:
/var/log/php-fpm/error.log
或 pool 配置里:
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
✅ 查看:
ls -l /var/log/php-fpm/
journalctl -u php-fpm
日志写到:
/var/log/httpd/error_log
✅ 查看:
tail -f /var/log/httpd/error_log
/var/log/nginx/error.logerror_log 指定文件PHP 进程用户(如 apache / nginx / php-fpm)没权限写日志
touch /var/log/php_errors.log
chown nginx:nginx /var/log/php_errors.log
chmod 644 /var/log/php_errors.log
SELinux 也可能导致:
ls -Z /var/log/php_errors.log
setsebool -P httpd_can_sendmail on
CentOS 默认会轮转日志:
/etc/logrotate.d/php-fpm
可能你看到的是:
php-fpm-error.logphp-fpm-error.log-20260101.gz✅ 查看:
ls -lh /var/log/php-fpm/
zcat /var/log/php-fpm/*.gz | less
error_reporting = E_ALL
display_errors = Off
log_errors = On
否则:
如果是 PHP CLI 或 FPM:
journalctl -u php-fpm
journalctl -u httpd
很多“丢失”的日志其实在 journal 里。
# 1. 看 php 配置
php -i | grep -E "log_errors|error_log"
# 2. 看 fpm 日志
ls -l /var/log/php-fpm/
# 3. 看 web 服务日志
tail -n 50 /var/log/nginx/error.log
tail -n 50 /var/log/httpd/error_log
# 4. 看系统日志
journalctl -u php-fpm --since "1 hour ago"
你可以告诉我:
php -i | grep error_log 的输出我可以直接告诉你该改哪一行。