最常见原因是修改的php.ini并非php实际加载的配置文件,需用phpinfo()或php -i确认“loaded configuration file”路径,若为none则可能由user.ini、.htaccess或php-fpm池配置覆盖。

php.ini 路径改错或没加载到正确配置文件
最常见的情况是:你改的 php.ini 根本不是 PHP 实际加载的那个。Web 请求走的是 FPM 或 CGI 模式,和 CLI 下的配置文件往往不同。
必须用 phpinfo() 页面查看 “Loaded Configuration File” 这一行,或者 CLI 下执行:php -i | grep "Loaded Configuration File"。如果显示为 none,说明当前没加载任何全局 php.ini,可能靠 user.ini、.htaccess(Apache)、或 php_admin_value(PHP-FPM 池配置)覆盖了。
- 宝塔、AMH 等面板常把用户级配置写在
/www/wwwroot/xxx/user.ini,优先级高于全局php.ini - PHP-FPM 池配置(如
www.conf)中若有php_admin_value[error_log],会强制覆盖php.ini的设置 - Docker 环境下,
PHP_INI_SCAN_DIR或环境变量可能动态挂载了另一套配置
log_errors = On 但 error_log 路径不可写或不存在
即使 log_errors = On,若 error_log 指向的路径不存在、父目录无写权限、或 SELinux/AppArmor 拦截,日志照样不落盘。
- 检查路径是否存在:
ls -l /var/log/php/app.log;不存在就mkdir -p /var/log/php && touch /var/log/php/app.log - 确认 Web 进程用户(如
www-data、nginx、apache)对文件有写权限:chown www-data:www-data /var/log/php/app.log - CentOS/RHEL 上 SELinux 启用时,需加上下文:
chcon -R -t httpd_sys_rw_content_t /var/log/php/ - 磁盘满、inode 耗尽也会静默失败,用
df -h和df -i都要查
PHP-FPM 模式下 error_log 行为被覆盖或分流
在 Nginx + PHP-FPM 架构中,error_log 可能被多个层级接管:PHP-FPM 全局日志、池级日志、甚至 FastCGI 错误拦截。
- FPM 全局配置(
php-fpm.conf)中的error_log = /var/log/php-fpm/error.log会记录启动/子进程错误,但不收 PHP 脚本级error_log()输出 - 池配置(如
www.conf)中php_admin_value[error_log] = /var/log/php/www-error.log才真正控制脚本日志目标 - Nginx 配置里若设了
fastcgi_intercept_errors on;,500 类错误会被转成自定义页,掩盖原始日志触发点 -
catch_workers_output = yes才能让error_log()输出进 FPM 日志(仅限未指定路径时)
运行时代码覆盖了 ini 设置
很多框架或老项目会在入口文件(如 index.php、wp-config.php)里调用 ini_set() 或 error_reporting(),这些调用优先级高于 php.ini,重启服务完全无效。
- 搜索整个项目:
grep -r "ini_set.*log_errors\|error_reporting" . --include="*.php" - 典型干扰语句:
ini_set('log_errors', '0')、error_reporting(0)、ini_set('error_log', '/dev/null') - 临时调试可在出问题脚本顶部加:
error_reporting(E_ALL); ini_set('log_errors', '1'); ini_set('error_log', '/tmp/test.log'); - 注意:某些 CMS(如 WordPress)默认屏蔽
E_NOTICE,需显式放开才能看到变量未定义类警告
真正卡住排查的,往往是 FPM 池配置与 user.ini 的叠加效应,或是 SELinux 这种系统层限制——它不会报错,只让写入静默失败。动手前先确认 SAPI 类型(php_sapi_name())和实际生效的配置路径,比反复重启服务更省时间。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











