在 CentOS 上 PHP 日志“不生成”通常并不是 PHP 本身坏了,而是配置、权限或路径的问题。下面按最常见原因逐一排查。
PHP 常见日志有三类:
很多人说的“PHP 日志不生成”,其实是指 PHP 报错没写进文件。
php --ini
或(Web 环境)
phpinfo();
log_errors = On
error_log = /var/log/php/php_error.log
⚠️ 常见错误:
log_errors = Offerror_log 被注释掉ls -ld /var/log/php
如果不存在:
mkdir -p /var/log/php
PHP 一般是 php-fpm 用户 写日志:
ps aux | grep php-fpm
常见用户:
apachenginxwww-data授权示例:
chown -R nginx:nginx /var/log/php
chmod 755 /var/log/php
CentOS 默认开启 SELinux,这是非常常见但容易被忽略的原因。
getenforce
如果是 Enforcing:
setenforce 0
再测试是否生成日志。
semanage fcontext -a -t httpd_log_t "/var/log/php(/.*)?"
restorecon -Rv /var/log/php
如果你用的是 PHP-FPM:
vi /etc/php-fpm.conf
或
/etc/php-fpm.d/www.conf
检查:
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php/php-fpm.log
php_admin_value[log_errors] = On
重启:
systemctl restart php-fpm
fastcgi_intercept_errors on;
可能导致错误不暴露。
php_flag log_errors on
创建一个测试脚本:
<?php
error_log("PHP log test");
undefined_function();
访问页面或 CLI 执行:
php test.php
log_errors = Onerror_log 路径存在如果你愿意,可以贴出:
php.ini 相关配置我可以直接帮你定位是哪一步卡住了。