phpinfo()输出随PHP版本升级持续演进:PHP 7.0移除ereg、新增OPcache区块;PHP 8.0拆分JIT参数、显式暴露strict_types;PHP 8.1增加readonly常量及枚举反射类;PHP 8.2新增Dynamic properties禁用标记与error_reporting调低;PHP 8.3 json扩展启用simdjson并默认throw_on_error。

如果您查看不同PHP版本的phpinfo()输出内容,会发现其显示的信息结构、字段数量及细节存在明显差异。以下是对比分析各PHP版本phpinfo输出差异的具体步骤:
一、PHP 5.6 与 PHP 7.0 的核心字段增减
PHP 7.0 引入了Zend Engine 3.0,导致内部模块注册机制变化,phpinfo()中部分旧有配置项被移除,同时新增运行时优化相关条目。例如,PHP 5.6 显示“ereg”正则扩展信息,而 PHP 7.0 完全移除了该扩展及其对应区块;相反,PHP 7.0 新增了“Zend OPcache”独立模块区块,并在“Additional Modules”中明确列出opcache.so加载状态。
1、在PHP 5.6环境中执行,观察“Registered PHP Streams”下方是否包含“compress.zlib”和“https”两项。
2、在PHP 7.0环境中执行相同代码,确认“Registered PHP Streams”中已增加“php、file、data、http、ftp、phar、zip”等共11种流协议,且“https”不再单独列出,而是归入“openssl”扩展支持说明中。
立即学习“PHP免费学习笔记(深入)”;
3、对比“Configuration File (php.ini) Path”字段位置:PHP 5.6将其置于“Core”区块顶部,PHP 7.0则移至“Loaded Configuration File”独立行,位于页面开头附近。
二、PHP 7.4 与 PHP 8.0 的安全与类型提示字段变化
PHP 8.0 启用JIT编译器并强化类型系统,phpinfo()中新增与JIT配置直接关联的字段,并对已有类型相关配置进行重命名与归类调整。例如,PHP 7.4 中“opcache.jit”为布尔开关,而 PHP 8.0 将其拆分为“opcache.jit”、“opcache.jit_buffer_size”、“opcache.jit_target_layers”三个独立可调参数并全部显示;同时,“declare(strict_types=1)”的支持状态不再隐含于“Core”区块,而是在“PHP Core”子标题下新增“strict_types”明确条目。
1、在PHP 7.4环境下执行phpinfo(),查找“opcache”区块,记录“opcache.jit”值是否仅显示On/Off。
2、在PHP 8.0环境下执行相同操作,确认“opcache.jit”字段旁是否同步出现“opcache.jit_buffer_size”和“opcache.jit_target_layers”两行新配置项。
3、滚动至“Core”区块末尾,检查是否存在“strict_types => Off”独立字段行;若无,则说明该版本未将strict_types作为运行时可报告项暴露。
三、PHP 8.1 对只读属性与枚举的元信息补充
PHP 8.1引入只读属性(readonly properties)和枚举(Enums),phpinfo()虽不直接展示语法支持列表,但通过扩展加载状态与常量定义反映底层变更。例如,PHP 8.1 在“Core”区块新增“readonly”常量定义行,值为“1”,而此前所有版本均无此条目;同时,“Reflection”扩展区块中增加“ReflectionEnum”和“ReflectionEnumUnitCase”类名列表,表明反射系统已原生支持枚举元数据解析。
1、在PHP 8.1环境中执行phpinfo(),使用浏览器搜索功能定位“readonly”字符串,确认其出现在“Core”区块常量表格内。
2、向下查找“Reflection”扩展区块,核对“Classes”子项中是否包含“ReflectionEnum”、“ReflectionEnumUnitCase”、“ReflectionEnumBackedCase”三项。
3、对比PHP 8.0输出,验证上述三项是否完全缺失,且“Core”区块无任何“readonly”相关常量。
四、PHP 8.2 对动态属性弃用警告的标记方式
PHP 8.2默认启用对动态属性(dynamic properties)的弃用警告,该行为影响phpinfo()中“Zend Engine”区块的运行时标志呈现。例如,PHP 8.2 在“Zend Engine”标题下新增“Dynamic properties: Disabled”字段,而PHP 8.1及更早版本完全不显示该行;此外,“error_reporting”默认值在phpinfo()中由“32767”(E_ALL)改为“22527”(E_ALL & ~E_DEPRECATED & ~E_NOTICE),直接体现弃用提示级别调整。
1、在PHP 8.2环境中执行phpinfo(),定位“Zend Engine”区块,查找是否含有“Dynamic properties”字段及其值为“Disabled”。
2、在相同页面查找“error_reporting”行,记录其右侧数值是否为“22527”而非“32767”。
3、切换至PHP 8.1环境重复上述步骤,确认两项字段均未出现。
五、PHP 8.3 对JSON编码器重构的输出映射
PHP 8.3将json_encode/json_decode底层替换为基于simdjson的实现,phpinfo()通过扩展版本号与功能开关字段体现该变更。例如,PHP 8.3 在“json”扩展区块中,“Version”字段值变为“8.3.0”,且新增“simdjson support => enabled”独立行,而PHP 8.2仅显示“Version => 8.2.0”且无simdjson相关字段;同时,“json.throw_on_error”默认值由“Off”变为“On”,并在phpinfo()中明确标出。
1、在PHP 8.3环境中执行phpinfo(),查找“json”扩展区块,确认“Version”是否为“8.3.0”。
2、在同一区块内查找是否存在“simdjson support => enabled”字段行。
3、查找“json.throw_on_error”字段,记录其值是否为“On”而非“Off”。











