必须调http-timeout,不是process-timeout;它控制composer所有http请求(拉取packages.json、下载zip包)最大等待秒数,默认300秒,而process-timeout只管git clone等子进程执行时长;设错参数无效,且需同步调整php底层default_socket_timeout以防提前中断。

卡在Downloading https://?必须调http-timeout,不是process-timeout
看到Could not fetch https://repo.packagist.org/packages.json或curl error 28,说明是HTTP层卡住,和git、unzip、脚本执行完全无关。此时调process-timeout毫无作用——它只管子进程,不碰网络。
真正起效的是http-timeout,控制所有Composer发起的HTTP请求(拉元数据、下ZIP包)最大等待秒数,默认300秒。设错地方=白忙:
- 项目级:运行
composer config http-timeout 600,写入当前composer.json的"config"段 - 全局:运行
composer config --global http-timeout 600,写入~/.composer/config.json - 临时最高优先级:
COMPOSER_HTTP_TIMEOUT=600 composer install
为什么设了http-timeout还超时?PHP底层default_socket_timeout可能更早掐断
即使http-timeout设成1200,若PHP CLI的default_socket_timeout是60,连接会在60秒时被硬中断。这不是Composer的问题,是PHP自己先放弃了。
查当前值:php -i | grep default_socket_timeout。常见问题:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 值为60或更低 → 必须调高
- 临时绕过:
php -d default_socket_timeout=1200 $(which composer) install - 长期方案:改CLI专用
php.ini(路径用php --ini查),同时调高default_socket_timeout和max_execution_time
http-timeout之外,还有两个关键参数值得配
仅调http-timeout不够。Composer 2.2+ 支持细粒度控制,尤其对大包或弱网环境:
-
http.connect_timeout:只管TCP建连阶段,默认太短(常为10秒),易在DNS慢或TLS握手卡住。建议设为30:composer config --global http.connect_timeout 30 -
concurrent.http:并发请求数,默认可能过高导致代理/防火墙限流。内网或低带宽环境可降为1:composer config --global concurrent.http 1 - 注意:
timeout(无前缀)在旧版Composer中行为不一致,新版推荐用http.timeout,但实际仍常被识别为http-timeout别名;统一用带http.前缀的写法更稳妥
换镜像源比调超时更有效,但别忽略私有源的Nginx配置
很多“超时”本质是源本身响应慢或不稳定。阿里云、腾讯云镜像实测提速3–5倍,应优先尝试:
- 设阿里源:
composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/ - 确认生效:
composer config --global repo.packagist
但如果你用私有Packagist或自建镜像,Nginx的proxy_read_timeout可能卡住后端响应——这个值必须≥你设的http-timeout,否则Nginx先断连,Composer再怎么调都没用。
最常被忽略的点:超时参数只解决“等多久”,不解决“为什么慢”。DNS污染、代理中间件超时、公司防火墙策略、甚至ulimit限制socket数量,都可能让调高timeout变成徒劳。先换源、再查网络链路、最后才动超时参数。










