根本原因是Composer默认HTTPS拉取Git仓库时TLS握手或大包传输被干扰,并非网速慢;需分层排查:网络链路层(改--prefer-dist或SSH)、API限流层(配GitHub Token)、依赖解析层(收紧版本约束)、运行时环境层(确认PHP版本匹配)。

Composer install 或 update 卡在 Cloning failed 或 Connection timed out
根本原因通常是 Composer 默认走 HTTPS 协议拉取 Git 仓库(尤其是 GitHub、GitLab),而国内网络对这些域名的 TLS 握手或大包传输不稳定,不是“网速慢”,而是连接被干扰或重传失败。直接改 composer.json 的 repositories 通常无效,因为问题出在 VCS 驱动层。
- 临时跳过 Git 克隆,强制走 dist 包:运行
composer install --prefer-dist或composer update --prefer-dist;dist 包由 Packagist 缓存并提供 CDN 下载,稳定性高得多 - 若项目强制要求源码(比如用了
"type": "vcs"自定义仓库),可临时切换 Git 协议为 SSH(前提是已配好 SSH key):git config --global url."git@github.com:".insteadOf "https://github.com/" - 检查是否启用了代理但未正确配置 Git:运行
git config --global --get http.proxy,若输出异常地址,用git config --global --unset http.proxy清掉
执行 composer update 时卡在 Resolving dependencies 超过 5 分钟
这不是网络问题,是依赖解析器在暴力回溯——尤其当 composer.json 里写了过于宽泛的版本约束(如 "^1.0 || ^2.0")或启用了 minimum-stability: dev,会触发大量元数据请求和版本比对。
- 加
-vvv看具体卡在哪一步:composer update -vvv,重点关注最后几行是否停在Reading composer.json of vendor/package (dev-main)类似日志 - 禁用非必要稳定性:
composer update --no-dev先排除开发依赖干扰;再逐个收紧require中的版本号,避免*或dev-master - 清空 Composer 缓存再试:
composer clear-cache,旧缓存可能含损坏的 lock 文件或不一致的 dist 包索引
Could not fetch https://api.github.com/... 伴随 403 或 401 错误
这是 GitHub API 限流导致的——Composer 在解析依赖时会高频调用 GitHub API 获取仓库信息,未登录状态下每小时仅限 60 次请求。一旦超限,后续所有操作都会 403。
- 立刻生成 Personal Access Token(至少勾选
public_repo),然后配置到 Composer:composer config --global github-oauth.github.com YOUR_TOKEN - 验证是否生效:运行
composer config --global --list | grep github,应看到 token 值(不显示明文,但有配置记录) - 如果公司网络走统一出口 IP,多个开发者共用一个 token 可能仍被限流,建议每人配独立 token 并绑定邮箱
换镜像源后仍报 timeout,且 composer diagnose 显示 PHP version >= 7.2.5 但实际是 PHP 8.2
这说明 Composer 正在用系统默认 PHP(比如 `/usr/bin/php`)而非你当前终端里 php -v 显示的版本。Composer 会读取它启动时的 PHP 解释器,而很多镜像源(如阿里云、腾讯云)的 packagist.phpcomposer.com 仅支持 PHP 7.2–8.1,PHP 8.2+ 会因 cURL 或 OpenSSL 版本差异触发握手失败。
- 确认 Composer 使用的 PHP:
composer --version --verbose,看第一行 “PHP binary” 路径 - 用指定 PHP 运行:
/path/to/your/php82 /usr/local/bin/composer update(把路径替换成你实际的 PHP 8.2 位置) - 永久修复:删掉旧 Composer,用最新版安装脚本重装:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"→php composer-setup.php --install-dir=/usr/local/bin --filename=composer
国内环境下的 Composer 超时,八成不是“换个镜像”就能解决的。关键要分清是网络链路层(HTTPS/Git)、API 限流层(GitHub)、依赖解析层(版本约束爆炸)还是运行时环境层(PHP 版本错配)的问题——每类对应的解法完全不同,混用反而让问题更难定位。











