cURL error 28主因是DNS解析或TLS握手失败,非网速问题;应先换阿里云镜像源https://mirrors.aliyun.com/composer/并清缓存,再配asset-packagist.cn,最后按需调高http.timeout至600。

composer install 卡在 Downloading 或直接报 cURL error 28,不是网络断了,是默认配置没适配国内链路——调高超时只是补救,换对镜像源+禁用 IPv6+清缓存才是关键。
卡在 Downloading https://... 怎么办
这阶段失败纯属 HTTP 层等不及响应,http-timeout 是唯一生效参数,process-timeout 完全不参与。
- 先确认是否真用了镜像源:
composer config -g repos.packagist.org.url输出必须是https://mirrors.aliyun.com/composer(末尾不能带斜杠) - 设
http-timeout为 600:composer config -g http-timeout 600;若共享主机静默忽略该配置,改用环境变量:COMPOSER_HTTP_TIMEOUT=600 composer install - 别碰
http-basic:它只管账号密码,和超时无关,配了也白配 - PHP 自身的
default_socket_timeout仍可能干扰,临时绕过:php -d default_socket_timeout=600 $(which composer) install
为什么换了镜像源还是慢或超时
镜像只加速 dist(ZIP/TAR),对 source(Git clone)完全无效。项目里有 "prefer-source": true、私有 Git 仓库或硬编码了 repositories,Composer 就会 fallback 直连,触发超时。
- 检查
composer.json是否含"prefer-source": true或git@类仓库地址 - 清旧缓存:
composer clear-cache,否则本地残留的失败记录会持续重试 - 验证镜像是否真生效:
curl -I https://mirrors.aliyun.com/composer/packages.json应秒回200 OK - 禁用默认源兜底:
composer config -g packagist false,避免因下线私源逐个超时重试
CI/CD 中反复超时怎么稳住
容器每次重启都会丢失全局配置,COMPOSER_HOME 不固化就等于没配。而且 CI 环境常默认启用 IPv6,而国内多数镜像站对 IPv6 支持不完整,导致隐性延迟叠加。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- CI 脚本开头必须显式设置:
export COMPOSER_HOME=/tmp/composer,再跑composer config -g ... - 强制走 IPv4:
COMPOSER_IPV4=1 composer install;Windows 下设系统环境变量COMPOSER_IPV4 = 1(值是字符串1,不是布尔) - 别用
composer update上 CI:它会重新解析依赖树,耗时远高于install;应基于已提交的composer.lock执行 -
process-timeout超过 7200 秒会被 Composer 主动忽略,强制回退到 300 秒——这是硬编码限制,设再大也没用
autoload 阶段卡住不是网络问题
如果 composer install 卡在 Generating autoload files 后无响应,99% 是 I/O 阻塞,不是超时。常见于 WSL2、Docker for Mac 或 NTFS 挂载卷上大量 symlink 扫描。
- 跳过 autoload 生成调试:
composer install --no-autoloader,之后手动运行composer dump-autoload --optimize - 检查 APCu 是否启用但未配
apc.enable_cli=1:CLI 模式下 autoload 构建会异常缓慢 - WSL2 用户确认
/mnt/c/已加入/etc/wsl.conf的automount白名单,否则扫描卡死
真正容易被忽略的是:超时错误日志里往往没有 “timeout” 字样。比如 SSL operation failed 或 Could not fetch 循环后静默退出,其实是 TLS 握手卡住,不是下载慢——这时候调 http-timeout 没用,得查证书或代理配置。










