永久生效必须写入config.json文件而非仅设环境变量;执行composer config -g process-timeout 1800和composer config -g http-basic-timeout 300(composer 2.2+)即可全局持久配置,并需同步调高php default_socket_timeout、换国内镜像且清缓存。

永久生效必须写入 config.json,不是改环境变量
环境变量(如 COMPOSER_PROCESS_TIMEOUT)只在当前 shell 会话或 CI 命令中临时覆盖,重启终端或换项目就失效。真正「永久」指配置落地到 ~/.composer/config.json(Linux/macOS)或 %USERPROFILE%\AppData\Roaming\Composer\config.json(Windows),所有后续 composer 命令自动读取。
执行这两条命令即可完成全局永久设置:
-
composer config -g process-timeout 1800(控制git clone、unzip等子进程,推荐设为 1800 秒) -
composer config -g http-basic-timeout 300(控制单次 HTTP GET 连接+读取总时长,仅 Composer 2.2+ 支持)
注意:-g 参数不能省略,否则写入的是当前项目 composer.json 的 config 段,只对该目录生效。
http.timeout 和 http-basic-timeout 别混用
这两个参数作用阶段不同,且不兼容:
-
http.timeout是旧版 Composer(2.1 及以前)的唯一 HTTP 超时控制项,它覆盖 DNS 解析、TLS 握手、首字节等待、整个 body 传输——默认 300 秒 -
http-basic-timeout是 2.2+ 新增,**只管 HTTP 下载阶段的连接 + 读取**,不包含 DNS 或 TLS;它和process-timeout是正交关系 - 若你用的是 Composer 2.2+,
http.timeout已被弃用,设了也无效;必须用http-basic-timeout
验证是否写入成功:运行 composer config -g http-basic-timeout,有输出即生效;无输出说明没写对或版本不支持。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
PHP 底层 socket timeout 必须同步调高
即使 http-basic-timeout 设为 300,如果 PHP 的 default_socket_timeout 是默认 60 秒,底层 socket 会在 60 秒后直接断开,Composer 根本等不到自己的超时逻辑。
检查并修正:
- 运行
php -i | grep default_socket_timeout查当前值 - 若低于你设的
http-basic-timeout,需修改php.ini中的default_socket_timeout = 300 - 改完重启 CLI 环境(不用重启 Web 服务,
composer走的是 CLI SAPI)
换源比加 timeout 更治本,但必须清缓存
单纯延长超时只是“等得更久”,不能解决 DNS 慢、镜像响应差、fallback 回源卡顿等问题。永久设置超时后,务必配套做三件事:
- 换国内镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(末尾斜杠不能少) - 禁用官方源 fallback:
composer config -g repo.packagist false,防止慢速回源拖垮整体 - 立即清缓存:
composer clear-cache,否则旧包地址仍从失败缓存里拉
这三步做完再跑 composer install,你会发现多数超时根本不会触发——超时配置只是兜底,不是首选解法。










