应调http-timeout,它控制composer发起的http请求最大等待秒数,默认300秒,可临时设composer_http_timeout=600、项目级设composer config http-timeout 600或全局设--global;同时需检查php default_socket_timeout是否过小,并优先换用国内镜像源验证生效。

卡在 Downloading https:// 或报 Could not fetch https://repo.packagist.org/packages.json、curl error 28,该调 http-timeout —— 不是 process-timeout,也不是系统级 timeout 命令。
怎么确认是 http-timeout 不够用
典型表现:命令卡在下载阶段不动,终端没输出新行,但网络请求层已静默等待;加 -v 可看到最后停留在 Downloading https://mirrors.aliyun.com/... 或类似 URL;错误信息含 curl error 28(Operation timed out after XXX milliseconds)或反复重试后失败。
这些都指向 PHP 的 cURL / stream 层等不及响应,和本地执行脚本、git clone、解压完全无关。
-
http-timeout控制的是 Composer 发起的所有 HTTP 请求最大等待秒数,默认 300 秒 - 它不干预认证配置(如
http-basic、github-oauth),也不受process-timeout影响 - 若用了私有源,还得同步检查 Nginx 的
proxy_read_timeout和 PHP CLI 的default_socket_timeout(运行php -i | grep default_socket_timeout查看)
三种改法,优先级从高到低
临时覆盖最灵活,项目级最可控,全局设置适合统一环境:
- 临时生效(单次命令,优先级最高):
COMPOSER_HTTP_TIMEOUT=600 composer install - 项目级生效(写入当前
composer.json的"config"段):composer config http-timeout 600 - 全局生效(影响所有项目):
composer config --global http-timeout 600
注意:http-timeout 是 Composer 原生配置项,COMPOSER_HTTP_TIMEOUT 环境变量也有效,但别和 COMPOSER_PROCESS_TIMEOUT 混用——后者只管子进程,对网络请求无效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么设了还超时?常见干扰点
即使 http-timeout 设到 1200 秒,仍可能失败。这时候不是参数没生效,而是底层被掐断了:
- PHP CLI 的
default_socket_timeout值太小(比如 60),会早于 Composer 超时就中断连接;可临时绕过:php -d default_socket_timeout=1200 $(which composer) install - 镜像源本身响应慢或不稳定,换阿里云、腾讯云等国内镜像通常比调 timeout 更快见效
- DNS 解析失败或被污染,尝试加
--dns 223.5.5.5(阿里 DNS)或改/etc/resolv.conf - 某些 CI 环境(如 GitHub Actions 默认 runner)启用了 aggressive network timeout 策略,需配合
timeoutaction 配置
process-timeout 完全不相关,别碰它
如果你看到的是 [RuntimeException] The process timed out. 或卡在 Installing dependencies from lock file 后长时间无反应,那才是 process-timeout 的事。它控制 git clone、unzip、php artisan optimize 这类子进程,和 HTTP 下载无关。
改错地方等于白忙:设了 process-timeout 1800 对 curl error 28 一点用没有;反过来,把 http-timeout 调再高,也救不了一个死循环的 post-install-cmd 脚本。
真正容易被忽略的是 PHP 底层的 default_socket_timeout —— 它像一道隐形闸门,Composer 的 http-timeout 再大,也跨不过去。










