PHP 8.1设置error_reporting(E_ERROR)仍显示E_DEPRECATED的问题
问题原因
问题出在php.ini里的display_startup_errors = On配置,结合命令行环境的特性导致了这个现象:
display_startup_errors原本是控制PHP启动阶段的错误显示,但在命令行环境中,它会强制显示部分运行时错误(比如strftime()的弃用警告E_DEPRECATED),哪怕你通过error_reporting(E_ERROR)设置了仅报告致命错误。- 你代码里的
error_reporting()返回1,说明代码层面的设置是生效的,但display_startup_errors的优先级更高,直接绕过了这个限制输出了弃用警告。 - 当你设置
error_reporting(0)时,相当于完全关闭了所有错误报告,这会覆盖display_startup_errors的强制显示逻辑,所以警告就不再出现了。
解决办法
- 临时修复:在代码开头加一行
ini_set('display_startup_errors', 0);,关闭启动错误显示,这样error_reporting(E_ERROR)就能正常生效。 - 永久修复:修改
php.ini,把display_startup_errors改成Off,重启PHP后即可解决。
内容的提问来源于stack exchange,提问作者Cat
相关产品推荐
相关产品推荐

