composer install/update 默认不显示校验细节,需加 -v --no-cache 才可见完整 sha256 校验过程;--dry-run 不触发校验,真实校验必须执行安装或更新操作。

composer install 或 update 时如何看到完整校验日志
默认情况下,composer install 和 composer update 只显示进度条和关键提示,不暴露底层包完整性校验(如 SHA256、签名验证)的细节。要看到真实校验过程,必须显式启用调试模式并禁用静默行为。
- 加
-v(verbose)参数:输出依赖解析、下载、解压、校验各阶段的详细路径和哈希值;-vv会进一步显示 HTTP 请求头和响应体;-vvv还包含 PHP 调用栈(一般不用) - 务必同时加
--no-cache:否则 Composer 可能跳过重复校验,你看到的“校验通过”其实是缓存命中的结果,不是实时计算 - 若使用了
composer.lock,校验对象是 lock 文件中记录的dist.shasum字段,不是远程包最新版——这点常被忽略,导致误以为“没校验”
为什么 --dry-run 不触发实际校验
composer install --dry-run 看似安全,但它只模拟依赖解析,完全跳过下载与校验步骤。它不会读取 dist.shasum,也不会调用 Composer\Util\RemoteFilesystem::copy 中的哈希比对逻辑。所以别指望靠它验证数据一致性。
- 真正需要校验时,必须执行真实安装或更新操作
- 如果只想校验不写入 vendor,可用
composer install --no-scripts --no-plugins --no-autoloader组合,保留校验但跳过后续副作用 - 注意:PHP 的
openssl扩展必须启用,否则即使加-v也看不到 SHA256 比对行——它会静默降级为仅检查文件大小
从 composer.json 强制开启完整性校验
项目级配置可避免每次敲长命令。在 composer.json 的 config 段加入:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
{
"config": {
"secure-http": true,
"disable-tls": false,
"secure-signature": true,
"platform-check": true
}
}
其中 "secure-signature": true 是关键——它让 Composer 在下载后强制校验 dist 包的 shasum,且在校验失败时直接中止,而非警告后继续。配合 -v 就能看到类似这样的输出:
Downloading https://api.github.com/repos/monolog/monolog/zipball/9b78011a748fbf532732f8ca473540c5b7ab85eb Verified dist signature for monolog/monolog: 9b78011a748fbf532732f8ca473540c5b7ab85eb (sha256: a1b2c3...)
校验失败时的典型错误信息和应对
最常遇到的是 Invalid package information, shasum does not match,说明本地 lock 记录的哈希与远程包实际内容不一致。这不是网络问题,而是包被篡改或发布流程出错。
- 先确认是否用了镜像源:国内镜像(如阿里云、腾讯云)若同步延迟,会导致 hash 不匹配;临时切回官方源
composer config -g repo.packagist.org https://packagist.org再试 - 检查
composer.lock是否被手动编辑过——尤其dist.shasum字段,哪怕多一个空格也会失败 - 若确定是上游问题(比如 packagist 上某版本被重发),只能删掉
composer.lock重新生成,或手动composer require vendor/package:version --update-with-dependencies单独刷新该包
校验本身不耗多少时间,但一旦漏掉,就可能把带漏洞或恶意代码的包引入生产环境。很多人只盯着 autoload 和 scripts,却忘了 shasum 才是第一道数据防线。










