在 CentOS 上开启 PHP 日志,一般分为 PHP-FPM 和 PHP 错误日志 两部分。下面按常见场景给你一个完整说明(适用于 CentOS 7/8、Rocky、Alma 也类似)。
先确认你用的是 PHP-FPM 还是 Apache mod_php:
php -v
ps -ef | grep php
常见:
php-fpm:x.xhttpd 进程php.ini找到 php.ini 文件位置:
php --ini
常见路径:
/etc/php.ini
/etc/php/7.x/cli/php.ini
/etc/php/7.x/fpm/php.ini
编辑:
vim /etc/php.ini
确保以下配置存在并取消注释:
display_errors = Off
log_errors = On
error_reporting = E_ALL
error_log = /var/log/php/php_error.log
✅ 生产环境:
display_errors = Off
✅ 开发环境:display_errors = On
编辑 PHP-FPM 配置文件:
vim /etc/php-fpm.conf
或:
vim /etc/php-fpm.d/www.conf
设置:
error_log = /var/log/php-fpm/error.log
catch_workers_output = yes
catch_workers_output = yes 非常重要,否则 PHP 错误不会记录到 FPM 日志。
mkdir -p /var/log/php-fpm
chown -R apache:apache /var/log/php-fpm
# 或 nginx
chown -R nginx:nginx /var/log/php-fpm
systemctl restart php-fpm
systemctl restart httpd
systemctl restart nginx
tail -f /var/log/php/php_error.log
tail -f /var/log/php-fpm/error.log
如果是 Apache + mod_php:
vim /etc/httpd/conf/httpd.conf
添加:
php_value log_errors On
php_value error_log /var/log/php/php_error.log
如果日志写不进去,可能是 SELinux:
setenforce 0
临时关闭测试,如果正常,再配置 SELinux:
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
log_errors = Onerror_log 路径存在如果你愿意,可以告诉我:
我可以给你 精确到路径 的配置示例。