Composer下载超时需同时调高process-timeout和http-basic-timeout,默认值分别为300秒和60秒;推荐优先切换国内镜像并禁用packagist.org回源,比单纯延长超时更有效。

Composer install/update 卡在 downloading 或 timeout 错误
默认情况下,composer install 或 composer update 在下载包时会等待 300 秒(5 分钟),超时后直接报错:file could not be downloaded: failed to open stream: Connection timed out。这在网速慢、镜像不稳定或大包(如 laravel/framework 带完整测试套件的 dist)场景下极常见。
根本原因不是命令写错了,而是 Composer 内置的 process-timeout 和 http-basic-timeout 双重限制在起作用——前者控制整个命令生命周期,后者控制单次 HTTP 请求连接/读取时限。
-
process-timeout默认 300 秒,影响update全流程(含依赖解析、下载、解压) -
http-basic-timeout默认 60 秒,影响每个GET请求(比如从 packagist.org 或国内镜像拉 zip 包) - 两者独立生效,只调高一个可能仍失败;例如解析快但下载慢,就得同时调高
http-basic-timeout
临时生效:用 --timeout 和 --http-basic-timeout 参数
适合单次调试或 CI 环境快速绕过,不改全局配置。
- 延长整体执行时限:
composer update --timeout=1800(单位秒,这里设为 30 分钟) - 同时放宽 HTTP 请求等待:
composer update --http-basic-timeout=300(单次请求最长等 5 分钟) - 两个参数可一起用:
composer install --timeout=1200 --http-basic-timeout=240 - 注意:
--http-basic-timeout仅在 Composer 2.2+ 支持;旧版本只能靠--timeout和换镜像硬扛
永久生效:修改全局 config 或项目 config
推荐优先改全局配置,避免每个项目重复设置。运行以下命令即可写入 ~/.composer/config.json:
composer config -g process-timeout 1800 composer config -g http-basic-timeout 300
如果只想对当前项目生效(比如团队要求统一低 timeout),去掉 -g 参数:
composer config process-timeout 1200 composer config http-basic-timeout 180
- 修改后 config 文件里会出现类似:
"process-timeout": 1800, "http-basic-timeout": 300 - 值设为
0表示不限时(不建议,可能卡死无响应) - 改完不用重启终端,下次
composer命令自动读取
比调 timeout 更有效的做法:换镜像 + 关闭 packagist.org 回源
单纯加 timeout 只是“等得更久”,不能解决根本的网络不稳定问题。国内用户最该做的是两件事:
- 切到稳定镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 禁用官方源回源(防止镜像没命中时 fallback 到超慢的 packagist.org):
composer config -g repos.packagist false - 验证是否生效:
composer config -g repo.packagist应返回镜像地址;composer config -g repos.packagist应返回false - 这两步带来的提速远大于调 timeout,很多“超时”问题其实根本不会出现
timeout 是兜底手段,镜像和网络路径才是关键。尤其在 CI/CD 流水线里,不配镜像只加 timeout,大概率还是失败——因为超时只是表象,本质是请求发到了不可达的地址。










