兼容php 5.6–8.3的错误提示开关写法是:先用error_reporting()设级别(推荐e_all | e_deprecated),再用ini_set(‘display_errors’, ‘1’或’0′)控制输出,且须在脚本开头执行。
PHP 错误提示开关的兼容写法(5.6–8.3 都适用)
PHP 7.2+ 已废弃 error_reporting(E_ALL & ~E_NOTICE) 这类带位运算的旧式写法,但很多老项目仍混用 ini_set('display_errors', '1') 和 error_reporting(),结果在 PHP 8.0+ 上报错或静默失效。真正兼容的做法是:**先统一用 error_reporting() 设置级别,再用 ini_set('display_errors', '1') 或 '0' 控制是否输出到页面**,且必须在脚本最开头执行。
-
display_errors是 ini 配置项,值为字符串'1'或'0'(不能用布尔true/false,否则 PHP 8.0+ 会警告) -
error_reporting()接收整数或预定义常量,推荐直接用常量如E_ALL、E_DEPRECATED,避免位运算表达式 - CLI 模式下
display_errors默认为'0',即使设成'1'也可能被 php.ini 的cli.display_errors覆盖,需确认运行时配置
开发环境显示所有错误(含严格警告)
本地调试时,应让所有问题暴露出来,包括 E_DEPRECATED 和 E_WARNING。关键不是“开全”,而是“不漏掉可修复的提示”。
- 在入口文件(如
index.php)顶部立即写: -
error_reporting(E_ALL | E_DEPRECATED | E_STRICT);
-
ini_set('display_errors', '1'); - 注意:
E_STRICT在 PHP 8.0+ 已被移除,但加上无害;若目标最低版本是 8.0+,可省略| E_STRICT - Apache + mod_php 下,该设置仅对当前请求生效;FPM 模式下同样有效,但若用了 opcache,修改后需重启 FPM 或清缓存
生产环境屏蔽错误输出但保留日志
线上绝对不能让 Warning: Undefined array key "xxx" 直接刷到用户浏览器上。但“屏蔽”不等于“丢弃”——错误仍要记进日志供排查。