composer update --refresh 仅强制刷新元数据(如 packages.json、provider-*.json),不校验 vendor 文件完整性,也不触碰已下载包或 vendor 目录;校验哈希须用 composer_experimental=1 composer verify-checksums --strict。

composer update --refresh 不校验文件完整性,只刷新元数据
执行 composer update --refresh 本身不检查任何已下载包的哈希或 vendor 文件是否被篡改。它只强制丢弃本地缓存的索引文件(如 packages.json、provider-*.json),重新从镜像源拉取最新元数据,再做依赖解析。哪怕你本地 vendor/ 里混进了被篡改的文件,这个命令也完全感知不到。
常见误解是“刷新了缓存 = 重新验证了包”,但事实是:它连 vendor/ 目录都不碰一下。真正需要校验文件落地后的完整性,得另走一套机制。
-
--refresh要求 Composer ≥ 2.5;低于该版本会报Unrecognized option: --refresh - 它不重下 ZIP/TAR 包,所以不会触发 dist 包解压前的哈希校验(即不跑
PostFileDownloadEvent) - 如果镜像源配置错误(比如 URL 少了末尾
/或漏了"type": "composer"),--refresh会静默拉错数据,后续 install/update 全部失效
verify-checksums --strict 是唯一能校验 vendor 文件真实哈希的命令
要确认 vendor/ 下每个包的源文件是否和 composer.lock 中记录的 dist.sha256 一致,必须用:COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict
不设环境变量,命令不可见;不加 --strict,哪怕发现不匹配也只警告并返回 0(CI 会误判成功)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 它递归扫描
vendor/{vendor}/{package}/下所有非排除路径的文件(跳过.git、tests/、docs/等),归并字节流后计算 SHA256 - 仅比对有
dist.sha256字段的包(即通过--prefer-dist安装的 zip/tar 包),type: "path"或--prefer-source安装的包直接跳过 - 不校验
vendor/composer/autoload_*.php这类生成文件,但会扫描并失败于手动改过的vendor/autoload.php(它无哈希记录)
为什么 install 成功后 verify-checksums 却报 mismatch
composer install 只在校验刚下载的 dist 包**解压前**的哈希,一旦解压完成,就不再回看磁盘上实际文件。而 verify-checksums --strict 是真打开 vendor/ 目录,逐文件读取再算一次 SHA256 —— 两者校验时机和对象完全不同。
- 本地缓存曾被污染,重装时复用了坏包:
install因缓存命中绕过校验,verify-checksums立刻暴露磁盘上已存在的篡改 - 镜像源替换了 dist 包但未同步原始哈希:
install阶段“匹配”,verify-checksums必然失败 - CI 中用了
--prefer-source:走 git clone,无dist.sha256,verify-checksums直接跳过,不报错也不校验
verify-checksums 报错后怎么定位具体哪个文件坏了
该命令只告诉你 “Package monolog/monolog hash mismatch”,不会列出是哪个文件出问题。要定位,得手动操作:
- 从
composer.lock中提取该包的dist.sha256值 - 进
vendor/monolog/monolog目录,运行:find . -type f ! -name "*.php" -o -name "*.php" | xargs shasum -a 256 | shasum -a 256(Linux/macOS) - 把输出结果和
dist.sha256比对;若不一致,说明目录内有文件被修改或损坏
最危险的是 vendor/autoload.php:它被扫描到、却无任何哈希记录,被注入恶意代码时 Composer 完全无法感知。生产部署前务必设 vendor/ 为只读,并单独断言该文件内容未变。










