PHP7.2无法屏蔽错误日志中NOTICE信息的排查求助
首先先解析你查到的error_reporting值22519:这个数值对应的是E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED,理论上确实应该排除NOTICE级别的错误日志。但既然NOTICE还在出现,咱们从以下几个容易遗漏的点逐一排查:
确认配置文件是否真正生效
先看phpinfo()里的关键字段:Loaded Configuration File:确认你修改的custom.ini是PHP实际加载的主配置文件Additional .ini files parsed:如果custom.ini是额外加载的配置,要确保它出现在这个列表里- 重点对比
error_reporting的Local Value和Master Value:如果两者不一致,说明有地方覆盖了全局配置。比如php-fpm.conf里的php_admin_value[error_reporting]优先级最高,它会直接覆盖ini文件的设置,且无法被代码或.user.ini修改,你要检查php-fpm.conf里是否存在这个配置,且值是否正确。
排查代码或框架的动态设置
有些项目的框架、第三方库或者自定义代码里,会通过error_reporting()函数动态修改错误报告级别,比如部分框架初始化时会强制设置error_reporting(E_ALL)。你可以全局搜索项目代码里的error_reporting调用,看看有没有地方覆盖了配置文件的设置。检查站点目录下的.user.ini或.htaccess
如果你的环境支持(比如Nginx配合FPM时开启了php_value支持,或是Apache环境),站点根目录下的.user.ini或者.htaccess文件里可能存在php_value error_reporting的配置,这会针对当前站点覆盖全局ini设置。去项目目录里找找这两个文件,检查相关配置项。确认错误日志的来源
有时候你看到的NOTICE可能不是PHP脚本产生的,而是PHP-FPM自身的日志(比如FPM的启动警告、慢请求日志等)。先看phpinfo()里的error_log字段,确认你查看的日志文件是PHP的错误日志,而非FPM的独立日志(比如常见的www-error.log)。OPcache缓存导致配置未更新
如果你的PHP开启了OPcache,修改配置后仅仅重载php-fpm可能不够——OPcache会缓存旧的配置信息。这种情况下需要完全重启php-fpm服务,确保新的error_reporting设置生效。尝试显式配置常量表达式
可以尝试在php.ini或custom.ini里直接写常量表达式(PHP7.2支持这种写法):error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED替代数值22519,避免数值计算错误或版本差异导致的问题,写完后重启php-fpm再测试。
内容的提问来源于stack exchange,提问作者techrose

