Composer清缓存后仍加载旧代码,根本原因是OPcache未刷新,而非Composer缓存未清干净;需重启PHP-FPM、调用opcache_reset()或同步清理composer.lock与vendor目录。

Composer清缓存后还加载旧代码?先确认是不是OPcache在捣鬼
不是 Composer 缓存没清干净,而是 PHP 的 OPcache 仍在执行旧字节码。composer clear-cache 只删 ~/.composer/cache 下的 ZIP 和元数据,和运行时代码完全无关。
典型现象:改了 src/Helper.php,跑了 composer dump-autoload、clear-cache,甚至重装 vendor/,浏览器或 CLI 输出仍是旧逻辑。
- Web 环境(Nginx + php-fpm):必须重启 FPM 进程,
sudo systemctl restart php*-fpm(如php8.2-fpm) - CLI 环境(Artisan、PHPUnit):默认不启用 OPcache;若手动开了
opcache.enable_cli=1,需调用opcache_reset()或重启终端进程 - 开发中临时验证:加一行
if (function_exists('opcache_reset')) opcache_reset();到入口脚本开头(仅限本地)
删了缓存但 vendor/ 里还是旧包?检查 composer.lock 是否被忽略
composer.lock 是硬性版本锁定文件,它里面的 dist.sha256 值会和缓存 ZIP 校验。只删 ZIP 不删 lock,Composer 仍会拒绝安装——它发现“缓存里这个 ZIP 的哈希和 lock 里写的对不上”,就直接报错或跳过。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须同步清理:
rm -f composer.lock+rm -rf vendor(Windows 用rd /s /q vendor) - 重装时加
--no-cache --force-checksums:前者强制跳过本地 ZIP,后者让校验失败立刻退出,避免污染vendor/ - CI 环境尤其要注意:如果
composer.lock提交前用的是旧镜像源地址,重装时仍会尝试走那个失效路径
为什么 composer install -v 显示 “Extracting” 却还是旧代码?定位损坏 ZIP 文件再删
报错如 Failed to extract vendor/symfony/console 或 Corrupted zip file: monolog/monolog,本质是 ~/.composer/cache/files/ 下某个 ZIP 下载中断或写入异常,不是网络问题,也不是镜像失效。
- 别急着
composer clear-cache—— 它会删光所有包,但 Composer 默认仍可能复用已损坏的缓存副本(只校验旧哈希,不重下) - 盯住
composer install -v输出末尾,找Extracting后紧跟着的包名(如symfony/console) - 查缓存路径:
composer config --global cache-dir(Linux/macOS 通常是~/.composer/cache) - 进
files/子目录,模糊搜索并只删对应 ZIP:ls -l *symfony*console*.zip(Linux/macOS)或 PowerShell 中Get-ChildItem "$env:APPDATA\Composer\Cache\Files" -Filter "*console*.zip" - 别碰
repo/和vcs/目录——它们不参与解压流程
metadata 滞后导致拉不到新版本?手动清 repo 缓存 + installed.json
即使换了镜像、清了全量缓存,composer update 仍可能读取旧的 packages.json 快照,尤其是 Packagist 新发布的包或私有仓库更新后。
- 真正要删的三处:
~/.composer/cache/repo/https---packagist.org/(远程元数据)、vendor/composer/installed.json(当前安装快照)、composer.lock(版本锁定) - 组合操作更可靠:
composer clear-cache && rm -rf ~/.composer/cache/repo/https---packagist.org/ && rm -f vendor/composer/installed.json composer.lock - 验证是否真重拉元数据:
composer update --dry-run -v,看日志里是Reading from cache还是Downloading https://...
最常被忽略的点:你以为在修 Composer,其实问题藏在 OPcache、composer.lock 或 repo/ 子目录里——这三处不一起动,单清缓存基本等于白干。

















