在 CentOS 上 PHP 日志为空,通常不是“没报错”,而是日志根本没配置输出到你想看的地方。下面按最常见原因逐一说明,你可以对照排查。
PHP 常见日志有 3 类,位置完全不同:
查看 php-fpm 配置:
php-fpm -i | grep "error_log"
# 或
grep error_log /etc/php-fpm.conf
grep error_log /etc/php-fpm.d/www.conf
正常应有:
error_log = /var/log/php-fpm/error.log
如果没有:
vim /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
ls -l /var/log/php-fpm/
如果 php-fpm 用户(通常是 apache / nginx / www-data)无写权限:
chown nginx:nginx /var/log/php-fpm
chmod 755 /var/log/php-fpm
php --ini
编辑:
vim /etc/php.ini
确保:
log_errors = On
error_log = /var/log/php/php-error.log
display_errors = Off
创建日志目录:
mkdir -p /var/log/php
chown nginx:nginx /var/log/php
重启 php-fpm / web 服务。
例如:
这些不会写 PHP 日志,而是:
tail -f /var/log/nginx/error.log
tail -f /var/log/httpd/error_log
测试一下:
<?php
error_log("test php log");
undefined_function();
如果连 error_log 都不出现,说明 日志配置没生效。
getenforce
如果是 Enforcing:
setsebool -P httpd_can_network_connect on
restorecon -Rv /var/log/php
或临时验证:
setenforce 0
php -i | grep error_log
ls -l /var/log/php*
tail -f /var/log/php-fpm/error.log
tail -f /var/log/nginx/error.log
systemctl status php-fpm
如果你愿意,可以告诉我:
我可以直接给你一份精确配置。