Intl扩展版本由PHP源码中ext/intl/的PHP_INTL_VERSION宏、configure.ac中的AC_CHECK_ICU最低版本、config.h生成的ICU_VERSION_MAJOR/MINOR及stubs.php中INTL_ICU_VERSION共同确定。

如果您在调试国际化功能时需要确认 PHP 源码中内置的 Intl 扩展版本及其所支撑的语言支持能力,则需直接从源码结构与编译配置中提取信息。Intl 扩展的版本并非独立于 PHP 源码存在,而是由源码中 intl/ 子目录的实现、configure 脚本参数及依赖的 ICU 版本共同决定。以下是查看此信息的具体步骤:
一、检查源码根目录下的 configure.ac 或 configure.in 文件
该文件定义了 PHP 构建时对 Intl 扩展的支持策略与版本约束条件。Intl 扩展启用与否、是否强制绑定 ICU 版本、以及最低 ICU 要求均在此声明。
1、进入 PHP 源码根目录,执行命令:grep -A 5 -B 5 "intl" configure.ac。
2、查找包含 PHP_ARG_ENABLE([intl], [whether to enable internationalization support]) 的段落。
立即学习“PHP免费学习笔记(深入)”;
3、观察其后是否出现类似 AC_CHECK_ICU([64.2], [...]) 的调用,该数值即为源码编译时硬性要求的最低 ICU 版本,间接反映 Unicode 支持基线。
二、查阅 ext/intl/ 目录中的头文件与版本宏
PHP 源码中 ext/intl/ 子目录包含所有 Intl 扩展的 C 实现,其版本标识通常嵌入在主头文件或模块初始化代码中,用于运行时识别。
1、打开文件 ext/intl/php_intl.h,搜索 PHP_INTL_VERSION 宏定义。
2、若存在,该宏值即为源码中预设的 Intl 扩展版本号(如 "1.1.0"),与最终编译产物的 INTL_VERSION 一致。
3、进一步查看 ext/intl/intl_convert.c 或 ext/intl/intl_data.h,确认是否存在 INTL_ICU_VERSION_STRING 或类似 ICU 版本硬编码字段。
三、分析 config.h.in 中生成的 ICU 版本常量
PHP 源码在 autogen 阶段会将 configure 脚本探测到的 ICU 版本写入 config.h,该头文件被 intl 扩展大量引用,是运行时获取 ICU 元信息的原始依据。
1、确认 config.h 是否已由 ./buildconf && ./configure 生成(若未构建则跳过)。
2、在 config.h 中搜索 HAVE_ICU、ICU_VERSION_MAJOR、ICU_VERSION_MINOR 等预处理器符号。
3、记录其数值,例如 #define ICU_VERSION_MAJOR 72 和 #define ICU_VERSION_MINOR 1,组合即为 ICU 72.1,对应 Unicode 15.1 标准。
四、定位 ext/intl/ 下的 stubs.php 与常量注册逻辑
stubs.php 文件虽为 PHP 层存根,但其中显式声明了扩展导出的核心常量,包括版本号和 ICU 绑定标识,是源码级可读的权威参考。
1、打开 ext/intl/stubs.php。
2、查找 define('INTL_ICU_VERSION', '...'); 行,该字符串值由构建系统注入,直接体现源码预期的 ICU 版本。
3、同时检查是否存在 define('INTL_VERSION', '...');,该值若存在,即为源码中设定的扩展语义版本。
五、比对源码提交历史中 intl/ 目录的关键变更
PHP 官方 Git 仓库中 intl/ 目录的更新日志隐含着版本演进线索,尤其当 configure.ac 或头文件中无明确版本号时,提交信息可揭示实际支持的语言范围与 Unicode 特性。
1、在 PHP 源码根目录执行:git log --oneline -n 20 -- ext/intl/。
2、筛选含 "ICU 73"、"Unicode 15.1"、"locale data update" 等关键词的提交摘要。
3、检出对应提交,查看 ext/intl/tests/ 下新增的测试用例,其 locale 参数(如 'uz_Latn_UZ'、'ff_Adlm_SN')可反推源码当前支持的语言区域数量与书写系统覆盖度。



















