composer怎么解决超时报错_composer怎么延长请求时间【方案】

1次阅读

composer install/update 超时应优先配置国内镜像并设置 process-timeout=600~1200,而非已废弃的 http-basic.timeout;若仍报 curl 28 错误,说明问题在 DNS、代理或 TLS 握手层,需用 curl -v 测试镜像连通性。

composer怎么解决超时报错_composer怎么延长请求时间【方案】

composer install/update 时提示 Connection timed out 怎么办

超时本质是 Composer 在下载包或访问 Packagist 时,HTTP 请求被中断。默认 timeout 是 300 秒(5 分钟),但实际中常因网络波动、镜像响应慢、大包下载卡顿等提前失败。

直接改全局 timeout 最有效,但要注意:不是所有环境都允许无限制延长,盲目设太高反而掩盖真实问题(比如镜像不可用)。

  • composer config -g repos.packagist.org.type composer 必须确保已配置国内镜像(如阿里云、腾讯云),否则延长 timeout 只是硬扛烂网络
  • 临时生效用 --timeout=600:例如 composer update --timeout=600
  • 永久生效写入全局配置:composer config -g process-timeout 600(注意不是 timeout,是 process-timeout
  • 若仍失败,检查是否触发了 DNS 或代理问题——加 -vvv 看具体卡在哪一步:composer update -vvv --timeout=600

process-timeout 和 http-basic.timeout 有啥区别

很多人搜到 http-basic.timeout 就去配,结果没用。这是旧版 Composer(v1)遗留的配置项,v2 已废弃;真正控制 HTTP 请求超时的是 process-timeout,它管的是整个命令生命周期(包括解压、脚本执行、依赖解析等),不是单个 HTTP 连接。

  • process-timeout:单位秒,默认 300,推荐设为 6001200,再高意义不大
  • http-basic.timeout:v1 配置,v2 不读取,设了也无效
  • Composer v2 实际底层用的是 Guzzle,但不暴露 HTTP 层 timeout 控制,所以别试图改 guzzlehttp/guzzle 配置

在 CI/CD(如 github Actions)里怎么稳定跑 composer install

CI 环境更易超时,尤其首次安装或缓存失效时。不能只靠拉长 timeout,得组合优化。

  • 优先启用缓存:composer install --no-interaction --prefer-dist --optimize-autoloader,避免 dev 包和源码拉取
  • --ignore-platform-reqs 谨慎使用——仅当明确知道 PHP 扩展缺失不影响构建时才加,否则会掩盖兼容性问题
  • GitHub Actions 示例片段:
    run: |   composer config -g repos.packagist.org.url https://mirrors.aliyun.com/composer/   composer config -g process-timeout 1200   composer install --no-interaction --prefer-dist
  • 如果用 docker,记得宿主机 DNS 不稳会导致超时,可显式指定 --dns 8.8.8.8 或在 /etc/resolv.conf 中加固

为什么改了 process-timeout 还报 cURL Error 28: Operation timed out

这个错误说明 cURL 层已放弃连接,Composer 还没来得及介入计时——也就是说,超时发生在 DNS 解析、TCP 握手或 TLS 协商阶段,process-timeout 根本没启动。

  • 先确认镜像地址是否可直连:curl -v https://mirrors.aliyun.com/composer/packages.json
  • 若 curl 也超时,问题不在 Composer,而在网络策略(公司代理、防火墙、DNS 污染)
  • 某些企业网络会拦截 HTTPS SNI,导致 TLS 握手卡住,此时需配置 composer config -g github-oauth.github.com xxx 或换用支持 SNI 的镜像
  • windows 上 WSL2 用户常见问题:/etc/resolv.conf 自动注入的 nameserver 不可用,需手动覆盖

超时问题表面是时间不够,背后常是网络路径不稳定或镜像服务异常。改 process-timeout 是最快止血手段,但每次遇到都该顺手查下 composer diagnose 输出和镜像连通性——否则下次还是同一块石头绊倒。

text=ZqhQzanResources