Hash verification failed 是 Composer 主动拒绝加载,因下载 zip 与 composer.lock 中 dist.sha256 不匹配;需确保镜像同步、配置生效、锁文件重置。

hash verification failed 不是网络抖动或缓存脏了,是 Composer 主动拒绝加载——它发现下载的 zip 包和 composer.lock 里记的 dist.sha256 对不上。换镜像不等于解决问题,关键得让镜像源真正同步、配置真正生效、锁文件真正重置。
怎么确认当前用的是哪个镜像源
很多人以为切了镜像就万事大吉,其实 composer config -g repos.packagist 输出可能还是 packagist.org,或者被项目级 repositories 覆盖。运行:
composer config -g repos.packagist
正确输出应为:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}如果不是,说明全局镜像没设上;再跑 composer config repositories 看项目级配置是否覆盖了它。企业环境还常因 DNS 解析失败导致请求根本没走到镜像站,可手动测通:curl -I https://mirrors.aliyun.com/composer/packages.json,必须秒回 HTTP/2 200 才算真通。
为什么删 vendor 后 run install 还报错
因为 composer install 默认复用现有 composer.lock,而这个文件里存的哈希值已经和当前镜像/源返回的包不一致了。只删 vendor/ 是白忙。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先备份:
cp composer.lock composer.lock.bak - 彻底清空:
rm -rf vendor composer.lock(Windows 用rd /s /q vendor & del composer.lock) - 切回官方源保真:
composer config -g --unset repos.packagist - 重装生成新锁:
composer install—— 此时会拉取最新元数据,生成带当前有效哈希的新composer.lock
别跳过这一步直接切回阿里云镜像——它通常有 10–30 分钟同步延迟,尤其对新 tag 或 dev 分支。等不及就换华为云镜像,已知同步更快。
CI/CD 中反复校验失败怎么办
CI 环境里常见“清缓存→装包→又报错”,问题往往出在构建缓存污染或平台要求干扰。注意:
-
composer clear-cache不够,要加--no-cache参数强制跳过本地缓存(如 GitHub Actions 的cache: false) - 避免
--ignore-platform-reqs,它不绕过哈希校验,但会掩盖 PHP 扩展缺失引发的后续异常 - 某些私有仓库或
type: vcs配置会完全绕过镜像逻辑,用composer install -v看日志里实际请求的 dist URL 是不是你预期的镜像地址 - 临时验证是否为校验机制本身卡住,可用
COMPOSER_DISABLE_CHECKSUM_VERIFY=1 composer install,但它在 Composer 2.2+ 已被标记为 deprecated,仅限定位,不能进 CI 流水线
哈希匹配了,vendor 就安全了吗
不。Composer 只在校验下载的 dist 归档包时用一次 dist.sha256,装完就丢。它 不会 在运行时校验 vendor/ 目录里的任何文件——包括 vendor/autoload.php 这种高危入口文件。这个文件被篡改后,composer install 完全无感。
生产环境必须设 vendor/ 为只读:chmod -R 555 vendor/;CI 检测脚本里建议固化关键文件哈希,比如:
[[ $(sha256sum vendor/autoload.php | cut -d' ' -f1) == "b0e4a7c9d8f1e2b3a4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7" ]] || echo "autoload.php tampered!"
这个哈希值得按项目实际计算并固化,否则检测形同虚设。

















