应调 http-basic-timeout,它控制单次 HTTPS 请求总耗时(DNS+TLS+响应头+body下载),错误含 cURL error 28 或反复 retry 失败时需设为300;process-timeout 仅用于 git clone、unzip 等子进程超时。

直接改 process-timeout 和 http-basic-timeout 两个配置项,缺一不可——前者管 git clone、unzip 这类子进程,后者管单次 HTTPS 请求(含 TLS 握手 + 首字节等待 + body 下载),只调一个,大概率还是卡住。
卡在 Downloading https:// 该调哪个参数
这是 HTTPS 请求卡在连接或传输阶段,错误里常带 cURL error 28 或反复 retry 后失败。它完全不看 process-timeout,只响应 http-basic-timeout(Composer 2.2+)或旧版的 http.timeout(2.1 及更早)。
-
http-basic-timeout控制单次 GET 的总耗时(DNS + TLS + 读取响应头 + 下载 body),推荐设为300(5 分钟) - 项目级:运行
composer config http-basic-timeout 300 - 全局级:运行
composer config -g http-basic-timeout 300 - 临时覆盖:用环境变量
COMPOSER_HTTP_TIMEOUT=300或命令行--http-basic-timeout=300(注意不是--http-timeout) - ⚠️ PHP CLI 的
default_socket_timeout必须 ≥ 你设的值,否则底层 socket 会在 60 秒就掐断;查法:php -i | grep default_socket_timeout
报 The process timed out 该调哪项
错误里一定含 [RuntimeException] The process "" exceeded the timeout,加 -vvv 能看到最后执行的命令,比如 git clone 或 unzip。这是子进程执行超时,和 HTTP 完全无关,只由 process-timeout 控制。
-
process-timeout控制单个外部命令最大执行时间,默认 300 秒,大包或私有 Git 仓库建议设为1200(20 分钟)甚至1800 - 项目级生效:
composer config process-timeout 1200(写入当前composer.json的config段) - 全局生效:
composer config -g process-timeout 1800(写入~/.composer/config.json或新版的~/.config/composer/config.json) - 临时覆盖优先级最高:
COMPOSER_PROCESS_TIMEOUT=1800 composer install,适合 CI 调试 - 值为
0表示禁用超时,但不推荐——网络卡死时会无限挂起,无法 Ctrl+C 中断
为什么换镜像比调 timeout 更有效
单纯延长 timeout 只是“等得更久”,不能解决根本的连不上、404、503、代理中断或镜像不同步问题。国内用户 90% 的“超时”本质是请求发不出去或返回异常状态码。
- 确认镜像地址末尾没多出
/,比如https://mirrors.aliyun.com/composer/→ 错误拼成.../composer//packages.json导致 404 - 禁用 packagist.org 回源:运行
composer config -g repo.packagist false,避免 fallback 到慢速官方源 - 验证镜像是否生效:
composer config -g repos.packagist应输出{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - Git 类依赖(
"type": "git")不走镜像,需单独确保git clone可通;可临时切回 HTTPS 协议:composer config -g github-protocols https
最易被忽略的是:PHP CLI 的 default_socket_timeout 值低于你设的 http-basic-timeout,会导致 Composer 还没开始读 body 就被 PHP 自己掐断——这个底层限制必须同步调高,否则所有 timeout 配置都形同虚设。


















