Composer 请求超时由 process-timeout 配置项控制,它定义整个命令执行的最大允许耗时(默认300秒),而非单次HTTP连接超时;该值需通过 composer config 命令写入全局或项目级 composer.json 的 config 段。

Composer 请求超时是哪个配置项控制的
Composer 的网络请求超时由 config.json 中的 process-timeout 和 fxp-asset(旧插件)或 github-oauth 相关设置无关,真正起作用的是 http-basic 之外的底层 HTTP 超时参数——但 Composer 官方并未暴露 connect-timeout 或 max-duration 这类 cURL 级别配置。实际生效的是 process-timeout,它控制的是整个命令执行的**最大允许耗时(秒)**,不是单次 HTTP 连接超时。
常见误解是改 timeout 或 default-timeout,这些字段在 Composer 配置中并不存在,强行写入会被忽略。
-
process-timeout默认值为 300(5 分钟),适用于install、update等耗时操作 - 若遇到
file could not be downloaded: failed to open stream: Connection timed out,大概率是 DNS 解析慢、镜像源响应卡顿或本地网络策略限制,而非该值太小 - 该值设得过大(如 3600)不会提升下载成功率,反而会让失败卡更久才报错
如何正确修改全局或项目级 config.json
运行 composer config -g process-timeout 600 修改全局配置;或进项目目录后运行 composer config process-timeout 600 写入项目级 composer.json 的 config 段。注意:项目级配置优先级高于全局。
手动编辑时,确保结构合法:
{
"config": {
"process-timeout": 600,
"secure-http": false
}
}
⚠️ 容易踩的坑:
- 直接改
vendor/composer/installed.json或composer.lock—— 无效,这些是输出文件 - 在
config.json(非composer.json)里改 —— Composer 不读取独立的config.json,只认composer.json里的config或通过composer config命令写入的全局配置(位于~/.composer/config.json) - 忘记加逗号导致 JSON 格式错误,引发
JSON decode error
比改 timeout 更有效的超时缓解方式
单纯调大 process-timeout 是治标。国内用户更应优先检查镜像源和网络路径:
- 确认已切换到国内镜像:运行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)或推荐用https://packagist.laravel-china.org(注意该站已于 2023 年停服),现主流是https://mirrors.aliyun.com/composer/,设置命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 临时禁用 HTTPS 验证(仅调试用):
composer config -g secure-http false,避免证书校验失败卡住 - 清除 DNS 缓存或换 DNS(如 114.114.114.114),很多“超时”实为 DNS 解析失败后重试耗尽了
process-timeout - 如果用的是 GitHub 包且频繁 403,需配置
github-oauthtoken,否则限流会表现为连接挂起
为什么有时改了还是超时
因为 Composer 的 HTTP 层基于 PHP 的 stream_context_create 或 cURL,默认连接超时(connect timeout)约 10 秒、总传输超时(total timeout)由 process-timeout 间接约束,但无法单独调整。某些企业网络会主动中断空闲连接,此时即使 process-timeout 设为 3600,也可能在 60 秒左右被中间设备断开,报错类似 Operation timed out after 60001 milliseconds with 0 bytes received。
这种情况下,process-timeout 已无意义,必须配合镜像源 + 网络层排查。另外,PHP 自身的 default_socket_timeout(php.ini 中)也会影响底层 stream 行为,但 Composer 会覆盖它,所以不建议动这个值。











