90%的composer install失败源于镜像配置错误、未清缓存或项目级配置覆盖:键名必须为repo.packagist(非repos)、type值必填composer、url须以/结尾;验证需执行composer config -g repo.packagist输出完整json,并用composer install -vvv确认请求域名是否为镜像地址。

composer install 失败,90% 不是网络被墙,而是中文镜像没配对、没生效、或配完没清缓存。
为什么 composer config -g repo.packagist 总是不生效?
命令静默失败最常见——不是镜像地址错了,是键名、类型、URL 格式三处全踩坑:
• 键名必须是 repo.packagist(不是 repos.packagist,多一个 s 就写进无效字段)
• 中间那个 composer 是 type 值,不能省;少了它,Composer 会 fallback 到默认源
• URL 必须以 https:// 开头,且结尾带 /(比如 https://mirrors.aliyun.com/composer/,少斜杠在某些版本里会拼接出错)
验证是否真写进去了:composer config -g repo.packagist,输出应为完整 JSON 对象,如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};如果返回空或 null,说明根本没写成功。
composer install 还卡在 downloading?先清缓存再查日志
换镜像后不 composer clear-cache,旧失败记录还在缓存里,重试照样走原地址。
真正验证是否走镜像,别只看命令行输出,加 -vvv 看真实请求:composer install -vvv --no-progress,盯住日志里出现的域名——要是还看到 packagist.org 或 api.github.com,说明镜像根本没接管。
注意:项目级 repositories 配置优先级高于全局,但如果你的 composer.json 里写了 "packagist": false,等于主动关掉基础源,镜像再快也拉不到 monolog/monolog 这类核心包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
报 cURL error 60 或 certificate verify failed 怎么办?
这不是镜像问题,是 PHP 的 OpenSSL 找不到可信 CA 证书,或者系统时间偏差超 5 分钟。
先查证书路径:php -r "print_r(openssl_get_cert_locations());",重点看 default_cert_file 指向哪;如果为空、路径不存在,或和 curl -I https://mirrors.aliyun.com/composer/packages.json 实际用的证书不一致,就得手动配。
临时绕过(仅调试):composer config -g secure-http false;但生产环境禁用——更稳妥的做法是下载 CA 包并指定:curl -sS https://curl.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem,再在 php.ini 里加 openssl.cafile=/usr/local/etc/openssl/cert.pem。
顺手跑个 date,时间不准也会导致 TLS 握手直接失败。
权限报 Permission denied 写 vendor/?别 chmod 777
报错里那行路径就是线索:file_put_contents(/path/to/vendor/autoload.php): Permission denied → 直接 ls -ld vendor/,只要属主是 root,就说明你之前用过 sudo composer install。
修复不是加权限,是改归属:sudo chown -R $USER:$USER vendor/(项目内)或 sudo chown -R $USER:$USER $(composer config --global cache-dir)(全局缓存目录)。chmod 777 不但无效,还会让 Composer 下次拒绝写入——它认为目录不安全。
composer.json 里写了不兼容的约束,照样会在 Resolving dependencies 阶段卡死——那部分日志才暴露真实瓶颈。










