必须同时调高http.timeout(控制HTTPS全周期,建议1200)、process-timeout(控制unzip等子进程,建议1800)和http-basic-timeout(细粒度GET超时,建议300),并确保PHP default_socket_timeout与之匹配,否则底层会提前中断。

必须同时调高三个超时参数,只改一个基本没用。 Composer 下载解压失败不是单一环节的问题,而是 HTTP 传输、子进程执行、PHP 底层 socket 三层限制叠加的结果。单独加 --timeout 或只改 process-timeout,常会卡在 unzip 或 cURL error 28 上不动。
卡在 Downloading https:// 时该调哪个参数
这是 DNS 解析、TLS 握手、首字节等待、整个 ZIP body 传输的总耗时问题,由 http.timeout 控制。默认仅 300 秒,弱网下拉一个 200MB 的 laravel/framework dist 包很容易超时。
- 项目级生效:
composer config http.timeout 1200(写入当前composer.json的config段) - 全局生效:
composer config -g http.timeout 1200 - 临时覆盖(CI 最常用):
COMPOSER_HTTP_TIMEOUT=1200 composer install - ⚠️ 关键但常被忽略:PHP CLI 的
default_socket_timeout必须 ≥ 你设的http.timeout,否则底层直接掐断。运行php -i | grep default_socket_timeout查看,若为 60,需在php.ini中改为default_socket_timeout = 1200
The process timed out 错误该调哪个参数
错误信息里明确带 The process "" exceeded the timeout,说明是 unzip、git clone、tar -xzf 或 post-install-cmd 脚本执行太久被杀,和 HTTP 无关,由 process-timeout 控制。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 默认值 300 秒,解压大 dist 包或跑 Laravel
php artisan config:cache就可能超时 - 项目级:
composer config process-timeout 1800 - 全局:
composer config -g process-timeout 1800 - 临时:
COMPOSER_PROCESS_TIMEOUT=2000 composer update - 注意:
process-timeout对install、update、run-script全部生效,不只限于下载阶段
Composer 2.2+ 新增的 http-basic-timeout 怎么用
它控制单次 HTTP GET 请求的连接 + 读取时限(比如拉 packages.json 或 ZIP 的前几 KB),不涉及整个 body 下载。弱网下 TLS 握手慢、DNS 解析卡顿,容易在这里先失败,而 http.timeout 还没开始计时。
- 默认仅 60 秒,很多国内镜像响应头慢就直接断
- 建议设为 300:
composer config -g http-basic-timeout 300 - 这个参数可以写进
composer.json的config段,但http.timeout不行 —— 它只能通过命令或环境变量设置 - 旧版本 Composer(
真正难处理的不是参数本身,而是它们之间的依赖关系:改了 http.timeout 却忘了同步调高 PHP 的 default_socket_timeout,或者以为 --timeout 能覆盖一切,结果卡在 unzip 阶段毫无提示。网络慢时,换镜像比加 timeout 更治本,但一旦用了私有 VCS 包或自建仓库,超时配置就绕不开。

















