根本原因是composer 2.2+仅用sha256校验且容错过宽,--force-checksums强制失败中断,配合clear-cache才能避免损坏包污染vendor/;换镜像无效,因所有官方镜像均同步packagist的dist.sha256值。

composer 下载 ZIP 包损坏,根本原因不是镜像“不支持 MD5 校验”,而是 Composer 从 2.2 开始只用 sha256,且所有官方镜像(包括阿里云、腾讯云)都严格同步 Packagist 的 dist.sha256 值——换镜像本身不会增加或修复校验能力。
真正起作用的是:强制让校验失败时立刻中断,而不是跳过警告继续执行。
为什么 --force-checksums 比换镜像更关键
默认情况下,composer install 遇到 Content-Length mismatch 或 Invalid archive signature 只会打印 Warning,然后尝试解压损坏包,导致后续出现 Class not found 或空文件。这不是镜像的问题,是 Composer 的容错策略太宽松。
-
--force-checksums强制在校验失败时抛出Invalid archive signature并退出,避免污染vendor/ - 它不依赖镜像是否“支持 MD5”——Composer 从不用 MD5,只认
sha256字段 - 该参数必须每次显式带上:
composer install --force-checksums,不会写入配置 - 已缓存的损坏 ZIP 不会被自动跳过,所以必须配合
composer clear-cache
换镜像前先确认它真生效了
很多人执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就以为搞定了,但实际可能完全没生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 验证命令必须是:
composer config -g repo.packagist,输出得是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - URL 必须以
/结尾,少一个斜杠就会拼成https://mirrors.aliyun.com/composer/packages.json→ 404 - 项目根目录若有
composer.json里含"repositories"字段,全局配置会被彻底忽略 - CI 环境(如 GitHub Actions)必须在 workflow 中显式运行配置命令,不能靠本地设置
清缓存比删 vendor/ 更优先
错误现象:Failed to extract vendor/symfony/console: unable to open archive,重试多次仍卡在同一包。
- 先运行
composer clear-cache—— 否则即使删了vendor/,Composer 还会从~/.composer/cache/files/里拉那个损坏的 ZIP - 再进缓存目录手动删对应包:
rm -f ~/.composer/cache/files/symfony/console-*.zip(Linux/macOS) - 最后跑
composer install --no-cache --force-checksums,跳过缓存 + 强制校验双保险 - 别直接
rm -rf vendor/后就install——如果缓存没清,还是装回坏包
autoload.php 找不到?大概率不是 ZIP 损坏
报 failed to open stream: No such file or directory 或 Class not found,90% 是路径或结构问题,不是校验失败。
- 确认当前工作目录是项目根目录(含
composer.json),否则require 'vendor/autoload.php'会相对当前路径查找 -
vendor/autoload.php由 Composer 自动生成,只要install成功执行过,它就该存在;不存在说明安装流程被中断过,且没清理干净 - 不要手动复制
vendor/目录——autoload.php里的路径映射是硬编码的,跨项目即失效 - 运行
composer dump-autoload不会重建缺失文件,它只刷新类映射表
--force-checksums 是开关,不是配置项;它不改变 composer.lock,也不影响已安装包,只对本次下载生效——这意味着 CI 脚本里漏写这个参数,就等于没开保护。










