Composer install卡在downloading实为中文镜像返回乱码或空响应,需先用composer config -g repo.packagist确认是否配置了已下线源(如phpcomposer.com),再执行composer clear-cache、删vendor与composer.lock,最后切换至阿里云镜像https://mirrors.aliyun.com/composer/并验证-vvv日志是否命中该域名。

Composer install 时卡在 downloading,实际是中文镜像源返回了乱码或空响应
国内部分 Composer 镜像(如某些已下线或未及时同步的第三方源)会返回非标准 HTTP 响应体(比如含 BOM 的 UTF-8、HTML 错误页、甚至二进制乱码),导致 composer install 卡住或报 file_put_contents(): Only variables should be passed by reference 这类看似无关的错误。根本原因不是 PHP 版本或权限问题,而是 Composer 在解析 JSON 响应前就因非法字符崩溃了。
验证方法:运行 composer diagnose,若提示 Warning: Accessing xxx.com via http://, which is deprecated 或出现 JSON decode error,大概率是镜像源数据损坏。更直接的方式是手动 curl 对应包的 packages.json 地址,看是否返回可解析的 JSON。
- 临时跳过镜像:加
--no-plugins和-vvv参数运行composer install,观察日志中最后请求的 URL 是否来自异常域名(如https://packagist.phpcomposer.com) - 检查当前全局镜像:
composer config -g repo.packagist,确认值是否为已知失效源(例如https://packagist.phpcomposer.com、https://packagist.laravel-china.org) - 不要依赖“看起来像中文镜像”的域名——有些二级域名已被回收,HTTP 302 跳转到不可控页面
用 composer config 正确切换回官方源或可信镜像
Composer 1.x 和 2.x 对镜像配置方式一致,但必须用 composer config 显式覆盖,不能只改 composer.json 里的 repositories —— 那只影响当前项目,而损坏源往往藏在全局配置里。
- 恢复官方源(最稳):
composer config -g repo.packagist https://packagist.org - 切到阿里云镜像(推荐):
composer config -g repo.packagist https://mirrors.aliyun.com/composer/ - 切到腾讯云镜像:
composer config -g repo.packagist https://mirrors.cloud.tencent.com/composer/ - 如果公司内网有私有源,确保其
packages.json可被curl -I返回200 OK且 Content-Type 是application/json
执行后删掉项目根目录下的 vendor/ 和 composer.lock,再运行 composer install —— 不要跳过 lock 文件重建,否则可能复用旧的损坏元数据。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 vendor/bin/composer 自动更新后仍走坏源?
因为 Composer 的配置分三层:命令行参数 > 项目级 composer.json > 全局 config.json。即使你更新了 composer.phar,只要全局配置没清,它依然读取旧镜像地址。更隐蔽的是:某些 IDE(如 PHPStorm)或 CI 工具会缓存 Composer 配置,或在子 shell 中加载了错误的 HOME 环境变量,导致 composer config -g 实际写入了非预期路径。
- 查真实全局配置路径:
composer config -g --list,看第一行home指向哪 - 强制指定配置文件路径测试:
COMPOSER_HOME=/tmp/composer-test composer config -g repo.packagist https://packagist.org - CI 环境中避免用
composer self-update后立即install,先插一句composer config -g --list | grep repo确认生效
composer create-project 拉取失败,其实是模板包 metadata 损坏
这个命令默认从 packagist.org 拉取 composer/packagist 元数据,但如果本地全局镜像已损坏,它会尝试从坏镜像下载 https://xxx.com/packages.json,而该文件可能返回 404 HTML 页面,导致后续解析失败并静默退出。现象是终端停在 Installing dependencies from lock file 后无反应,ps aux | grep curl 也看不到进程 —— 实际是 Composer 在内存里反复尝试 decode 一段 HTML 字符串。
- 绕过:加
--repository-url=https://packagist.org参数,强制走官方源:composer create-project laravel/laravel test --repository-url=https://packagist.org - 预防:所有自动化脚本里,
composer create-project前统一加composer config -g repo.packagist https://packagist.org - 注意:某些老教程教的
composer config repo.packagist ...(缺-g)只改当前目录,对create-project无效
真正麻烦的不是换源动作本身,而是损坏镜像留下的缓存和 lock 文件残留 —— 它们不会自动失效,得手动清理才能彻底断开和坏源的关联。

















