composer卡在downloading或报curl error 28、the process timed out,需分层处理:卡在downloading应调http.timeout(控制dns+连接+传输总耗时,默认300秒),卡在cloning或executing command应调process-timeout(控制子进程执行时限),且须同步检查php底层default_socket_timeout(常为60秒)是否过短。

Composer 卡在 Downloading 或报 cURL error 28、The process timed out,不是命令写错了,而是默认超时太短 + 网络环境不匹配。必须分层处理:HTTP 请求、子进程执行、PHP 底层 socket 三者各自有独立超时机制,只调一个基本没用。
卡在 Downloading https://mirrors.aliyun.com/?优先调 http.timeout
这是最常见场景:命令停在下载包阶段,几秒后重试,最终失败。本质是 Composer 发起 HTTP 请求后,在等待响应数据(含 DNS、连接、传输)时被中断。http.timeout 控制的就是这个总耗时,默认仅 300 秒。
- 项目级生效(推荐,可提交进仓库):
composer config http.timeout 600 - 全局生效(影响所有项目):
composer config -g http.timeout 600 - 临时覆盖(优先级最高,适合 CI 调试):
COMPOSER_HTTP_TIMEOUT=1200 composer install - 注意:
--http-timeout=600仅 Composer 2.2+ 支持;旧版本必须用http.timeout配置项
卡在 Cloning into 'xxx' 或报 The process timed out?该调 process-timeout
现象是卡在 Cloning into '/tmp/'、Executing command: unzip -qq,或直接抛出 [RuntimeException] The process timed out。这和网络下载无关,而是 git clone、unzip、php script 这类子进程执行太久被杀——process-timeout 控制的就是这个。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目级设置:
composer config process-timeout 1800(写入当前composer.json的config段) - 全局设置已废弃:
composer config -g process-timeout在新版中无效,别再用 - 真正有效的全局方式是环境变量:
export COMPOSER_PROCESS_TIMEOUT=1800(Linux/macOS)或 Windows 系统变量 - 临时调试:
composer install --process-timeout=1800或COMPOSER_PROCESS_TIMEOUT=1800 composer update
设了 http.timeout 还在 60 秒断?检查 PHP 的 default_socket_timeout
即使你把 http.timeout 设成 1200,仍可能在 60 秒左右就断开,错误里没出现“timeout”字样,而是直接连接失败或空响应。这是因为 PHP CLI 的 default_socket_timeout ini 值(常为 60)会早于 Composer 的超时机制生效,强制中断底层 socket 连接。
- 查当前值:
php -i | grep default_socket_timeout - 临时绕过:
php -d default_socket_timeout=1200 $(which composer) install - 长期方案:找到 CLI 专用
php.ini(运行php --ini查路径),修改default_socket_timeout = 1200,并顺手检查max_execution_time - 注意:
default_socket_timeout影响所有 stream/curl 行为,不是 Composer 独有
比调 timeout 更有效的做法:换镜像 + 关闭 packagist.org 回源
单纯加 timeout 只是“等得更久”,不能解决根本的网络不稳定问题。国内用户应优先切换镜像源,并禁用对官方源的 fallback。
- 全局换阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 禁用 packagist.org 回源(关键!):
composer config -g repos.packagist.allow-unstable false并确认composer.json中没有硬编码的repositories覆盖全局配置 - 验证是否生效:
composer config -l | grep repos,输出应只显示镜像地址,不含packagist.org - 若项目含私有 GitHub/GitLab 包,不要把它们加进镜像配置——镜像不代理 VCS,反而会导致
Failed to clone
最容易被忽略的是:你以为改了配置,其实被项目级 config 覆盖了,或者环境变量没传给子 shell(比如在 Windows 上用 set 后直接跑命令,变量不会透传)。真要排查,先看 composer config -l 输出,再盯住日志里卡在哪一行——是 Downloading、Cloning,还是压根没动?对应点才准。










