跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Composer怎么检查PHP扩展 Composer怎么验证运行要求【环境】

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

相关文章