必须区分HTTP下载与子进程执行阶段:卡在Downloading时调http.timeout(控制DNS、TLS、首字节及body传输,建议600~1200秒),卡在Executing command时调process-timeout(控制git clone、unzip等子进程,建议1200秒),且需同步调高PHP default_socket_timeout。

Composer 请求超时不是单个开关能解决的问题,必须区分 HTTP 下载阶段和子进程执行阶段,分别调 http.timeout 和 process-timeout,缺一不可。
卡在 Downloading https:// 时该调 http.timeout
这是 DNS 解析、TLS 握手、首字节等待、整个 ZIP 包 body 传输的总耗时,错误里常带 cURL error 28 或反复 retry 失败。它完全不看 process-timeout。
-
http.timeout默认仅 300 秒(5 分钟),弱网或大包下极易触发;建议设为600或1200 - 项目级生效:运行
composer config http.timeout 600,写入当前composer.json的config段,可提交、可复现 - 全局生效:运行
composer config -g http.timeout 600,写入~/.composer/config.json - 临时覆盖优先级最高:设置环境变量
COMPOSER_HTTP_TIMEOUT=1200再跑命令,适合 CI 调试 - ⚠️ 关键陷阱:PHP CLI 的
default_socket_timeout若低于你设的http.timeout(常见值是 60),底层连接会被提前掐断——务必同步检查并调高:php -i | grep default_socket_timeout
The process timed out 错误该调 process-timeout
错误信息里一定含 [RuntimeException] The process "" exceeded the timeout,加 -vvv 可看到最后执行的那条命令。这说明是 git clone、unzip、post-install-cmd 这类外部命令卡住了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
process-timeout控制单个子进程最大执行时间,默认 300 秒,和 HTTP 完全无关 - 项目级改:直接在
composer.json顶层加"config": {"process-timeout": 1200} - 全局改:运行
composer config -g process-timeout 1800(30 分钟) - 命令行临时覆盖:用
--timeout=1800(注意等号不能省)或环境变量COMPOSER_PROCESS_TIMEOUT=1800 - 设为
0表示禁用超时,但可能卡死无响应;调试建议先设600,确认能走通再调高
别信 config.timeout —— 这是个无效字段
很多旧教程或文档里写的 "config": {"timeout": 600} 在 Composer 2.x 中早已失效。Composer 根本不识别这个 key。
- 真正起效的是三个独立参数:
http.timeout、process-timeout、http-basic-timeout(Composer 2.2+) -
http.timeout不能通过写进composer.json的config段来设置,只能用composer config命令或环境变量 -
http-basic-timeout是细粒度控制:只管单次 HTTP GET 的连接与读取(比如拉packages.json或 ZIP 头几 KB),适合设为300防握手慢中断,但它不替代http.timeout
脚本执行超时是 PHP 的事,不是 Composer 的
如果你的 post-install-cmd 或自定义脚本报 Maximum execution time of XXX seconds exceeded,这不是 Composer 配置能解决的。
- 它由 PHP 的
max_execution_time控制,和process-timeout无关 - 临时解决:用
php -d max_execution_time=0 composer install(0表示不限制) - CI/CD 中建议显式指定,例如
php -d max_execution_time=900 composer install --no-interaction - 脚本内部也可用
set_time_limit()主动延长,但必须尽早调用,且受disable_functions限制
最易被忽略的点是 PHP 底层 socket 超时和 Composer 配置的错位——哪怕你把 http.timeout 设成 1200,只要 default_socket_timeout 还是默认 60,cURL 就会在 60 秒后直接断开,根本等不到 Composer 的逻辑介入。

















