先看 -vvv 输出最后一行定位卡点:resolving dependencies→dns问题;downloading→调http.timeout或http-basic-timeout;executing command→调process-timeout;generating autoload files→非网络问题。

看 -vvv 输出的最后一行,卡在哪就调哪个参数
Composer 超时不是单一配置能解决的问题,必须先定位卡点。运行 composer install -vvv 或 composer update -vvv,盯住最后几行输出:
- 停在
Resolving dependencies:大概率是 DNS 解析失败或packagist.org域名不可达,跟 timeout 无关;可试dig packagist.org或换 DNS(如114.114.114.114) - 停在
Downloading https://:HTTP 层超时,该调http.timeout(Composer 2.x)或http-basic-timeout(2.2+) - 停在
Executing command (CWD: ):比如git clone或unzip卡住,process-timeout或COMPOSER_PROCESS_TIMEOUT才管用 - 停在
Generating autoload files后无响应:不是网络问题,可能是 WSL2 symlink 解析慢、APCu 未启用 CLI 模式、或文件系统权限异常
http.timeout 和 process-timeout 完全不一回事
这两个参数作用域和触发时机完全不同,混着调等于白等:
-
http.timeout控制单次 HTTP 请求总耗时(DNS + TLS 握手 + 首字节等待 + body 传输),默认仅 300 秒;下载大 dist 包或镜像首字节延迟高时最先触发;建议设为600 -
process-timeout控制整个composer install命令生命周期(含解压、运行post-install-cmd、生成 autoloader 等),默认也是 300 秒;大项目跑脚本时容易超,推荐设为1200或1800 -
http-basic-timeout是 Composer 2.2+ 新增的细粒度参数,只控 HTTP 连接/读取阶段(不含 DNS/TLS),默认 60 秒;若你用的是 2.2+,它比http.timeout更精准,但旧版不识别 - 注意:
config.timeout是 v1 废弃项,v2 完全不读;设了也无效
换镜像源不是“锦上添花”,而是必须前置动作
单纯拉长 timeout 只是让失败来得更晚,不能解决根本的网络不稳定。国内用户必须配对使用镜像与超时调整:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云镜像命令必须带
composer类型参数:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(末尾/不能少) - 验证是否生效:
composer config -g repo.packagist输出应为完整 JSON 或 URL 字符串;若为空、null或仍显示https://packagist.org,说明根本没写进去 - 换源后务必执行
composer clear-cache,否则缓存里还是旧元数据,Composer 会继续尝试连官方源做校验,卡在 TLS 握手 - 某些包(尤其是
"type": "git"的开发版依赖)会绕过镜像直连 GitHub,此时还得配合process-timeout和 Git 层超时(如git config --global core.sshCommand "timeout 300 ssh")
PHP 底层 socket 超时会提前掐断连接
即使你把 http.timeout 设为 1200,如果 PHP 的 default_socket_timeout 小于它,连接会在 PHP 层被强制中断——这是最常被忽略的底层限制:
- 查当前值:
php -i | grep default_socket_timeout,常见默认值是60 - 临时改:启动时加
-d default_socket_timeout=1200,例如php -d default_socket_timeout=1200 composer.phar install - 永久改:编辑
php.ini中的default_socket_timeout = 1200,注意 CLI 和 FPM 的php.ini可能不同,CLI 下改 CLI 的 - 这个值必须 ≥ 你设的
http.timeout,否则所有 HTTP 调用都会在它触发前被杀掉
真正卡住的时候,往往不是某个参数没设,而是多个层级(DNS → PHP socket → Composer HTTP → Composer process → Git 子进程)中某一层悄悄截断了请求。先看 -vvv 最后一行,再逐层核对,比盲目调高 timeout 有效得多。










