Composer安装超时闪退的根本原因是默认超时过短且镜像未正确配置:需同步更换阿里云镜像、清除缓存、设置process-timeout和http-basic-timeout(仅2.2+支持),并验证生效路径。

Composer安装超时闪退,不是网络差,而是默认超时太短 + 镜像没配对 —— 光改 timeout 没用,必须同步换镜像、清缓存、验证生效路径。
为什么composer install总卡在Downloading或直接退出
根本不是命令写错了,是 Composer 在下载阶段同时受两个独立超时控制:process-timeout(整个命令生命周期,默认300秒)和http-basic-timeout(单次 HTTP 请求,默认60秒)。大包、弱网、DNS慢时,60秒连 ZIP 都没拉完,就直接报file could not be downloaded: failed to open stream: Connection timed out闪退。
- 只调高
process-timeout,HTTP 层仍会在60秒断连 - 只调高
http-basic-timeout,但解析依赖耗时超300秒,也会被掐断 - 不换镜像,所有请求仍打向境外
packagist.org,延迟高、丢包率高,调 timeout 只是“等得更久”
两步实操:换镜像 + 改超时(必须一起做)
先确保镜像配置正确且生效,再调超时参数;顺序反了等于白配。
- 执行
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意中间composer类型参数不能漏) - 立刻清缓存:
composer clear-cache(否则旧的packages.json还在本地,根本不发网络请求) - 再设超时:
composer config -g process-timeout 1800和composer config -g http-basic-timeout 300 - 验证是否真生效:运行
composer install -vvv 2>&1 | grep "Downloading\|packages.json",看到Downloading https://mirrors.aliyun.com/composer/packages.json才算成功
http-basic-timeout在旧版 Composer 不起作用?
这个参数仅在 Composer 2.2+ 支持。如果你用的是 2.1 或更早版本,http-basic-timeout会被忽略,只靠process-timeout硬扛。
- 查版本:
composer --version,低于 2.2 就别配http-basic-timeout了 - 临时绕过:用
--timeout=1800参数代替(如composer update --timeout=1800) - 升级 Composer:
composer self-update(推荐,新版对国内网络适配更好) - 注意:
http.timeout是旧版配置项(已弃用),别和http-basic-timeout混淆
容易被忽略的关键点
最常踩的坑不是命令输错,而是配置写进了错误位置、PHP 禁用了环境变量、或缓存没清干净。
-
sudo composer config -g会把配置写进/root/.composer/config.json,但普通用户运行composer global require读的是$HOME/.composer/config.json,完全不生效 - PHP 的
disable_functions里如果禁了putenv,composer config -g静默失败,config.json文件里根本不会新增字段 - Windows 用户清缓存后,还得手动删
%LOCALAPPDATA%\Composer\cache,否则composer clear-cache可能不彻底 - 项目级配置(无
-g)优先级高于全局,如果composer.json里有repositories字段,它会覆盖全局镜像


















