Composer网络超时默认300秒,可临时用--timeout=3000或永久配置process-timeout=3000解决;优先启用--prefer-dist绕过Git克隆慢;需配置GitHub OAuth Token避免API限流。

Composer install/update 超时卡在 downloading 或 cloning 阶段
默认情况下,composer install 或 composer update 会在网络请求(比如下载包、克隆 Git 仓库)上设置 300 秒(5 分钟)超时。遇到大包、国内源不稳定或 Git over HTTPS 慢时,很容易触发 file_get_contents(): SSL: Connection timed out 或 Failed to clone https://github.com/xxx/xxx.git 这类错误。
直接改全局超时最有效,但要注意:不是所有慢都该靠加时间解决——先确认是真网络慢,还是源本身不可达。
- 临时生效:加
--timeout=3000参数(单位秒),例如composer update --timeout=3000 - 永久生效:运行
composer config --global process-timeout 3000,写入~/.composer/config.json - 如果用的是自定义镜像源(如阿里云、腾讯云),确保它支持完整包下载,有些镜像不代理 Git 克隆,此时加 timeout 无效,得换源或改用
dist模式
为什么 set_time_limit(0) 对 Composer 没用
很多人以为在 composer.json 里写 PHP 配置或改 php.ini 就能破 timeout,其实没用——Composer 的网络超时由它自己的 HTTP 客户端控制,和 PHP 脚本执行时间(set_time_limit)完全无关。
它的底层用的是 GuzzleHttp\Client,超时逻辑封装在 Composer\Util\HttpDownloader 里,不受 max_execution_time 影响。
- 检查当前配置:运行
composer config --global process-timeout,看输出值 - 注意:这个值只管「单次 HTTP 请求或 Git 操作」,不是整个命令生命周期;整个命令卡死更可能是 DNS 解析失败或 SSH 密钥问题
- 若设为
0,表示禁用超时,但不推荐——万一网络彻底不通,会无限挂起
Git 克隆慢导致超时,怎么绕过
Composer 默认优先走 source(Git 克隆),尤其当包的 dist 地址缺失、或你本地 composer.json 设了 "prefer-source": true。而国内访问 GitHub 的 Git over HTTPS 经常被干扰,比下载 zip 包慢得多。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
强制走 dist 是最快见效的方案,前提是包作者提供了 dist.zip 地址(绝大多数主流包都有)。
- 全局关闭 source:运行
composer config --global prefer-dist true - 临时关闭:加
--prefer-dist参数,例如composer install --prefer-dist - 检查是否生效:运行
composer install -v,看到Downloading https://mirrors.aliyun.com/composer/dists/xxx.zip就对了;如果还显示Cloning https://github.com/xxx/xxx.git,说明包本身没提供 dist,或镜像源未同步 dist 信息
国内环境别只盯着 timeout,还要关掉 GitHub API 限流
Composer 在更新时会调用 GitHub API 获取 tag 和 commit 信息,默认每小时 60 次。没登录 GitHub 账号的话,IP 共享配额极易耗尽,表现为 GitHub API limit exhausted,看起来像超时,实则是被拒绝。
解决方法不是加 timeout,而是让 Composer 认证自己——哪怕只是只读权限。
- 生成 Personal Access Token(勾选
public_repo即可),地址:https://github.com/settings/tokens - 运行
composer config --global github-oauth.github.com <your-token> - 验证:删掉
vendor/和composer.lock,再跑一次composer update --dry-run,看是否跳过 API 报错 - 注意:Token 泄露风险高,别提交到代码库;也不要用密码或 2FA 一次性码替代
超时只是表象,背后往往是源、认证、协议三者之一没对齐。调 timeout 前,先用 -v 看清卡在哪一步——是 DNS?SSL 握手?Git clone?还是 GitHub API 返回 403?

















