composer diagnose 检查 json、mbstring、openssl、phar、filter、hash、zip、curl/openssl 等 Composer 运行强依赖的扩展,不检查所有扩展;报错如 “The json extension is missing” 表示对应扩展未启用。
composer
diagnose 会检查哪些 PHP 扩展
默认会检查几个关键扩展是否启用,比如
、
、
、
、
、
、
(如果用到压缩包安装),还有
或
(用于 HTTPS 请求)。它不查所有扩展,只查 Composer 自身运行强依赖的那几个。
常见错误现象:
报
或
,说明对应扩展没开或没编译进 PHP。
确认扩展是否加载:运行
检查
php
.ini 路径:
,确保你改的是 CLI 模式下生效的配置(不是 Apache 或 FPM 的)
Windows 用户注意:
里扩展行不能带分号注释,且路径别用反斜杠写错,例如
要启用而非注释掉
composer install --dry-run 不验证扩展但会报运行时依赖失败
只模拟安装流程,跳过实际写文件,但它仍会解析
中的
和
,并触发对 PHP 版本、扩展、函数可用性的校验——只要某个包在
的
里声明了
,而当前 PHP 没开 zip,就会直接中断并报错。
使用场景:CI 流程中快速验证依赖是否可装,但又不想真下载/解压。这时候失败往往不是因为网络或权限,而是环境缺扩展。
立即学习
“
PHP免费学习笔记(深入)
”;
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
错误信息典型格式:
或
这种报错和
的检查逻辑不同:前者来自包元数据中的
约束,后者是 Composer 自身硬依赖
临时绕过?别用
掩盖问题,它只是跳过检查,不代表运行时不崩
怎么让 Composer 显式验证某扩展是否存在
没有单独命令只查一个扩展,但可以用
(Composer 2.2+)列出所有平台要求(PHP 版本 + 扩展 + 函数)及其满足状态。它比
更贴近项目真实需求,因为读的是
的
和各包的
。
参数差异:
默认只检查生产依赖;加
会递归检查所有依赖项的平台要求(包括 dev 包)。
示例输出中看到
就说明 GD 扩展没启用,哪怕
没报它
如果你在
的
里写了
,但本地是 5.3.6,这里就会标为
注意:这个命令不检查扩展功能是否完整(比如
开了但没支持 PNG),只看 extension_loaded() 是否返回 true
PHP 运行时扩展检测和 Composer 的边界在哪
Composer 只做「声明存在性」检查,不验证扩展是否能正常工作。比如
加载了,但
因 OpenSSL 版本太旧而失败,Composer 不会发现;又比如
存在,但 MySQL 服务根本没启动,Composer 同样不管。
性能 / 兼容性影响:扩展缺失导致的错误,往往在
阶段就卡住,不会等到
require 时才暴露。但有些扩展(如
)虽非强制依赖,缺了会影响后续脚本执行效率,Composer 完全不关心。
真正要覆盖运行时行为,得靠项目自己的初始化检查,比如在
开头加
CI 中建议组合使用:
+
+ 实际运行一个最小测试脚本
最容易被忽略的是:CLI 和 Web SAPI 的 php.ini 是两套,
和
显示的扩展列表可能不一致
composer diagnosejsonmbstringopensslpharfilterhashzipcurlopensslcomposer diagnoseThe json extension is missingmbstring is requiredphp -m | grep -E "json|mbstring|openssl|curl"php --iniphp.iniextension=php_openssl.dllcomposer install --dry-runcomposer.jsonrequirerequire-devcomposer.jsonrequire"ext-zip": "*"ext-zip * is required but not installedphp >=8.1 is required but you are running 8.0.30composer diagnoseplatform--ignore-platform-reqscomposer check-platform-reqsdiagnosecomposer.jsonconfig.platformrequirecheck-platform-reqs--with-dependenciesext-gd * missingdiagnosecomposer.jsonconfig.platform"ext-redis": "5.3.7"unmetgdext-curlcurl_init()ext-pdo_mysqlcomposer installautoload.phpopcachepublic/index.phpif (!extension_loaded('gd')) { die('GD required'); }composer diagnosecomposer check-platform-reqsphp -vphpinfo()