答案:composer_http_timeout控制单次http请求总耗时(dns+tls+首字节+传输),默认600秒但常因国内网络延迟触发curl error 28;需结合php底层default_socket_timeout调整,且生效优先级为环境变量>项目配置>全局配置。

COMPOSER_HTTP_TIMEOUT 控制 HTTP 请求总耗时
这个环境变量直接决定 Composer 发起的每个 HTTP 请求(DNS 查询、TLS 握手、首字节等待、响应体传输)最多能等多久。默认值是 600 秒,但国内网络下常因镜像首字节延迟高或包体积大而卡在 Downloading https://mirrors.aliyun.com/... ——此时它最先触发失败。
常见错误现象:cURL error 28、反复 retry 后中断、日志停在 Downloading 行。
- 临时生效(推荐调试用):
COMPOSER_HTTP_TIMEOUT=300 composer install - 全局生效(影响所有项目):
composer config -g http.timeout 300 - 项目级生效(可提交进仓库):
composer config http.timeout 300 - 注意:
--http-timeout=300仅 Composer 2.2+ 支持;旧版本会忽略该参数,必须用http.timeout配置项
COMPOSER_PROCESS_TIMEOUT 控制子进程执行上限
它管的是 git clone、unzip、php script 这类外部命令的单次运行时间,和网络下载无关。默认 300 秒,但拉取私有 GitLab 仓库、解压含二进制的大包(如 laravel/sail)时很容易超。
常见错误现象:The process timed out、日志停在 Cloning into '/tmp/...' 或 Executing command: unzip -qq。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 临时生效(最可靠):
COMPOSER_PROCESS_TIMEOUT=1200 composer install - Linux/macOS 全局生效:
export COMPOSER_PROCESS_TIMEOUT=1200(需确保 shell 环境变量能透传到子进程) - Windows 全局生效:在系统属性 → 环境变量中添加名为
COMPOSER_PROCESS_TIMEOUT的变量,值设为1200 - 注意:
composer config -g process-timeout在新版中已废弃,设了也不生效
PHP 底层 default_socket_timeout 会早于 Composer 超时生效
即使你把 COMPOSER_HTTP_TIMEOUT 设成 1200,仍可能在 60 秒左右就断开,错误里没有“timeout”字样,而是连接失败或空响应——因为 PHP CLI 的 default_socket_timeout ini 值(常为 60)会强制掐断底层 socket 连接,Composer 根本没机会介入。
查当前值:php -i | grep default_socket_timeout
- 临时绕过(适合 CI 单次运行):
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 专属
为什么改了环境变量还是不生效?
多数“调了没用”其实是变量根本没传进去,或者被覆盖了。
- CI/CD 中别写
export VAR=xxx && composer install,某些 runner 会丢掉子 shell 的环境变量;应写成VAR=xxx composer install - Windows 下用
set VAR=xxx && composer install(&&是关键,;不行) - 项目级
composer.json里的config.http.timeout会覆盖全局配置;运行composer config http.timeout可确认当前生效值 -
composer install -vvv最后一行输出就是卡点:停在Downloading→ 查COMPOSER_HTTP_TIMEOUT;停在Executing command→ 查COMPOSER_PROCESS_TIMEOUT和default_socket_timeout










