答案:应同步删除 vendor 和 composer.lock,禁用镜像后用 --no-cache --force-checksums 强制重装,再择机切回稳定镜像源;--force-checksums 并非跳过校验,而是用新下载包的实际哈希覆盖 lock 中旧值,确保三者(lock、vendor、镜像元数据)一致。

代理配置正确但 still hash verification failed 怎么办
校验失败和代理本身无关,是 Composer 拿着 composer.lock 里硬编码的哈希(比如 dist.sha256)去比对代理中转后拿到的包元数据——而某些代理(尤其是带缓存/重写功能的中间层,如旧版 Nginx 反代、Clash 的某些规则)会无意修改响应体或删掉 autoload 字段,导致哈希不匹配。
这不是证书问题,也不是网络超时,是内容被“动过”。临时跳过校验最安全的方式是强制重装并禁用镜像:
- 先彻底清掉本地干扰:运行
composer config -g --unset repos.packagist,再设回官方源composer config -g repo.packagist composer https://packagist.org - 删除
vendor和composer.lock(Windows 用rd /s /q vendor & del composer.lock) - 加参数重装:
composer install --no-cache --force-checksums——--force-checksums会让 Composer 忽略本地 lock 记录的哈希,改用刚下载包的实际哈希重新生成 lock
想跳过 SSL 校验?先确认你真需要它
代理环境下看到 SSL certificate problem 或 cURL error 60,大概率不是证书本身有问题,而是 Composer 在代理没配全时 fallback 到直连 HTTPS,触发了系统级 OpenSSL 校验。此时加 --no-secure-http 或改 curl.cainfo 都是治标。
真正该做的是堵住联网路径:
- 必须提前设置环境变量:
COMPOSER_DISABLE_NETWORK=1(Linux/macOSexport COMPOSER_DISABLE_NETWORK=1;Windows PowerShell$env:COMPOSER_DISABLE_NETWORK="1") - 同时禁用所有可能触发网络的组件:
--no-plugins --no-scripts --no-autoloader - 检查全局镜像是否残留:
composer config --global repo.packagist,若返回非false,必须运行composer config --global repo.packagist false
--ignore-platform-reqs 不能解决 hash 校验失败
--ignore-platform-reqs 只跳过 PHP 版本、扩展存在性等平台检查,对 dist.sha256 或 source.reference 这类锁文件内嵌的完整性哈希完全无效。很多人误以为加了它就能绕过校验失败,结果还是卡在 hash verification failed。
如果你确定包内容可信(比如离线传输、内部私有源),唯一可控方式是让 Composer 不依赖 lock 文件里的哈希:
- 删掉
composer.lock,再跑composer install --no-cache --force-checksums - 或者用
composer update --lock --no-cache --force-checksums仅更新 lock 文件中的哈希值,不重装 vendor - 注意:
--force-checksums不会跳过校验,而是“用新哈希覆盖旧哈希”,所以它只在你信任当前下载来源时才安全
CI/CD 中最容易忽略的校验链路
在 Jenkins/GitLab CI 等环境里,即使你设了代理、关了网络、跳了平台检查,仍可能在校验阶段失败——因为某些插件(如 phpstan/extension-installer)会在 post-install-cmd 里偷偷发起 HTTP 请求,而 --no-scripts 只禁用脚本执行,不阻止插件自身的网络调用逻辑。
稳妥做法是三重隔离:
- 环境变量:
COMPOSER_DISABLE_NETWORK=1 - 命令参数:
--no-plugins --no-scripts --no-autoloader - 配置清理:
composer config --global repo.packagist false+composer clear-cache
最后补一记 composer dump-autoload -o,否则运行时大概率报 Class not found —— 这步常被当成“优化可选”,其实是离线安装后必须补上的加载链闭环。


















