直接结论:卡在downloading https://就调http-timeout,卡在installing dependencies或报the process timed out就调process-timeout;二者独立生效,只改一个无效;http-timeout控制http请求最大等待秒数(默认300秒),process-timeout控制子进程执行时长(默认300秒,新版全局需用环境变量composer_process_timeout设置)。

直接结论:卡在 Downloading https:// 就调 http-timeout,卡在 Installing dependencies 或报 The process timed out 就调 process-timeout;只改一个,问题照旧。
卡在 Downloading https://?该调 http-timeout
这不是 Composer 慢,是 PHP 的 cURL 或 stream 层在等响应时被掐断了。典型现象包括:Could not fetch https://repo.packagist.org/packages.json、curl error 28、反复 retry 后失败,或卡在 Downloading https://mirrors.aliyun.com/ 不动。
-
http-timeout控制所有 HTTP 请求(拉取packages.json、下载 ZIP 包)的最大等待秒数,默认仅 300 秒;弱网下 DNS 解析慢、TLS 握手卡顿、镜像首字节延迟高,都可能超这个阈值 - 项目级最稳妥:
composer config http-timeout 600,写入当前composer.json的"config"段,可提交、可复现 - 全局设置影响所有项目:
composer config --global http-timeout 600,写入~/.composer/config.json - 临时覆盖优先级最高:
COMPOSER_HTTP_TIMEOUT=1200 composer install - 注意:
http-basic、github-oauth完全不干预超时;若用了私有源,还得检查 Nginx 的proxy_read_timeout和 PHP CLI 的default_socket_timeout(运行php -i | grep default_socket_timeout查,常见值是 60,不够用)
卡在 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
换镜像源但还超时?先确认它真在用
很多人执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就以为生效了,其实未必——命令错一处就静默失效。
- 必须是单数
repo.packagist,不是repos.packagist - 必须显式带上
composer类型:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(漏掉中间那个composer,Composer 2.x 会 fallback 回官方源) - URL 必须 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/,缺斜杠会导致请求路径拼成/composerpackages.json,直接 404 - 验证是否生效:
composer config -g repo.packagist输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - CI/CD 或宝塔面板要注意用户权限:
composer config -g默认写入 root 用户配置,但实际执行的是www用户,得切用户再配:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
大包下载中断?别只盯着 timeout
下载几十 MB 的扩展包(如 phpstan/phpstan)中断,本质是 cURL 底层的 CURLOPT_TIMEOUT(总超时)和 CURLOPT_CONNECTTIMEOUT(连接超时)共同触发的。默认分别是 300 秒和 10 秒,对大包太激进。
- 建议同步调大两个值:
composer config -g timeout 600和composer config -g connect-timeout 30(注意:这是timeout和connect-timeout,不是http-timeout,三者不同) - 临时绕过更直接:
composer install --timeout=1200(Composer 2.2+ 稳定支持) - 若仍失败且报
Failed to decode response,大概率是缓存包损坏,加--no-cache强制重试 - 禁用并行下载可降低并发压力:
composer config -g use-include-path false,尤其在低带宽或高丢包环境下有效 - 真正麻烦的是混合场景:公司内网走代理、镜像启用了防盗链、PHP 进程被
ulimit限制了 socket 数量——这些不会报 “timeout”,但一样导致中断
最容易被忽略的是 PHP 底层的 default_socket_timeout:就算你把 http-timeout 设到 1200,如果 CLI 模式下这个值还是 60,cURL 或 stream 层照样会在 60 秒时断开。它不走 Composer 配置,得单独查和调。










