composer卡住需区分两类超时:http-timeout控制http请求(如下载包、拉取packages.json),默认300秒;process-timeout控制git clone、unzip等子进程执行时长,也默认300秒;二者独立,设错无效。

Composer 卡住,不能只调一个 timeout —— 它分两类:网络下载(http-timeout)和本地命令执行(process-timeout),设错地方完全无效。
卡在 Downloading https://?该调 http-timeout
这是 PHP cURL 或 stream 层等不及响应,不是 Composer 慢,而是底层网络等待超限。典型错误包括:Could not fetch https://repo.packagist.org/packages.json、curl error 28、反复重试后失败。
-
http-timeout控制所有 HTTP 请求(拉取packages.json、下载 ZIP 包)最大等待秒数,默认 300 秒 - 项目级设置:
composer config http-timeout 600,写入当前composer.json的"config"段 - 全局设置:
composer config --global http-timeout 600,影响所有项目 - 临时覆盖(优先级最高):
COMPOSER_HTTP_TIMEOUT=600 composer install - 别被
http-basic或github-oauth迷惑——它们只管认证,完全不干预超时 - PHP 底层也有限制:
php -i | grep default_socket_timeout,CLI 模式下若值太小(如 60),会提前中断;可临时绕过:php -d default_socket_timeout=600 $(which composer) install
卡在 Installing dependencies 或报 The process timed out?该调 process-timeout
这是子进程(比如 git clone、unzip、php artisan optimize)跑太久被杀,和网络无关。错误里一定含 [RuntimeException] The process timed out.,加 -v 可看到最后执行的那条命令。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 config process-timeout 1800(30 分钟),写入当前composer.json - 全局配置已废弃:
composer config --global process-timeout在新版中无效,别信老教程 - 真正有效的全局方式是环境变量:
export COMPOSER_PROCESS_TIMEOUT=1800(Linux/macOS),Windows 下设系统变量 - 临时调试:
composer install --process-timeout=1800或COMPOSER_PROCESS_TIMEOUT=1800 composer update - 设为 0 表示禁用检查,但不推荐——真遇到 Git 不可达或脚本死循环,会无限卡住
为什么改了 --process-timeout 还报网络错误?
因为 process-timeout 对 HTTP 层完全无效。你看到的 curl error 28、Connection timed out 或 failed to open stream 都是 PHP cURL 或 stream 层的问题,根源在 http-timeout 或 PHP 底层配置。
- 两个 timeout 完全独立:一个管网络请求,一个管本地命令执行
- 混用或只改其一,问题照旧
- 私有 Git 仓库若本身有连接限制(如 Gitee 私有版),Composer 改了也没用,得调 Git 配置,比如
git config --global http.postBuffer 524288000 - 某些共享主机限制
max_execution_time,即使 Composer timeout 设再高,也会被 PHP 层强制 kill,此时需同步调整php.ini中的该值
怎么验证配置是否生效?
别只改完就跑,得确认它真被读进去了。
- 查项目级配置:
cat composer.json | grep -A 5 "config",看是否有"http-timeout"或"process-timeout" - 查全局配置:
composer config --global --list | grep -E "(http-timeout|process-timeout)" - 查环境变量是否生效:
env | grep COMPOSER_ - 运行时加
-v,观察日志开头是否打印出实际加载的 timeout 值(新版 Composer 会显示) - 临时覆盖优先级最高,但容易被忽略:CI 流水线里如果同时设了环境变量和命令行参数,后者胜出
最容易被忽略的是 PHP 底层的 default_socket_timeout 和镜像源链路中的某一段(DNS、TLS 握手、代理中间人)——它们不归 Composer 管,但会提前掐断请求。调 timeout 是必要动作,不是万能解药。










