应同时调高http.timeout和process-timeout:前者控制http下载(如拉packages.json、zip包),默认300秒,弱网下需设为600或更高,并同步调高php的default_socket_timeout;后者控制git clone、unzip等子进程,默认300秒,需设为1200或更高,二者缺一不可。

修改 Composer 的全局 timeout 配置
Composer 默认的网络请求超时是 300 秒(5 分钟),在弱网或镜像响应慢时容易触发 Connection timed out 或 file_put_contents(): Write of X bytes failed 类错误。直接改配置比每次加 --timeout 参数更稳定。
执行以下命令写入全局配置:
composer config -g process-timeout 1800
这会把全局 process-timeout 设为 1800 秒(30 分钟)。注意:process-timeout 控制的是单个外部进程(如 git clone、unzip)的最长运行时间,不是 HTTP 连接超时。
-
process-timeout值过大会掩盖真实卡死问题,建议先试 600~1200,再根据需要调高 - 该设置写入
~/.composer/config.json(Linux/macOS)或%APPDATA%\Composer\config.json(Windows),可手动编辑验证 - 若项目级配置已存在
process-timeout,它会覆盖全局值;此时需在项目根目录运行composer config process-timeout 1800(不加-g)
HTTP 层 timeout 要用 http-basic 或 ca-bundle 吗?
不是。Composer 的 HTTP 超时由底层 cURL 控制,无法通过 config 命令直接设置。真正起作用的是环境变量和 PHP 的 cURL 配置。
最常用且有效的做法是设环境变量:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
export COMPOSER_PROCESS_TIMEOUT=1800
或 Windows PowerShell:
$env:COMPOSER_PROCESS_TIMEOUT="1800"
这个变量优先级高于 config 中的 process-timeout,且影响所有后续 Composer 命令。
- 别尝试改
http-basic,那是认证配置,和超时无关 -
ca-bundle是证书路径,改错会导致 SSL 握手失败,不是超时问题 - 如果用国内镜像仍超时,大概率是镜像本身响应慢或 DNS 不稳,换镜像源比调 timeout 更治本
为什么设置了 timeout 还报 “Failed to decode response”?
这不是超时问题,而是 Composer 收到了不完整或损坏的 HTTP 响应体(比如 Nginx 截断、CDN 缓存污染、镜像服务异常返回空内容),process-timeout 完全不生效。
典型现象:命令卡住几秒后直接报 Failed to decode JSON 或 Invalid argument supplied for foreach(),但没出现 timed out 字样。
- 先运行
composer diagnose,看是否提示curl error或SSL certificate problem - 加
-v参数重试:composer update -v,观察最后几行实际请求的 URL 和响应状态码 - 临时禁用 HTTPS 强制跳转(仅调试):
composer config -g secure-http false,排除 TLS 层干扰
CI/CD 环境下 timeout 设置容易被忽略的点
GitHub Actions、GitLab CI 等环境默认限制 job 运行时长(如 GitHub 是 6 小时),但 Composer 自身 timeout 若设得太小,会在 CI 资源紧张时提前中断,导致构建失败而非超时——这会让问题排查方向跑偏。
- Docker 容器内运行 Composer 时,
process-timeout必须显式传入,因为容器通常无全局 config - GitLab CI 的
cache如果没包含vendor/或~/.composer/cache/,每次都要重下载,timeout 必须足够覆盖完整安装流程 - 某些 CI 平台会重写
HOME环境变量,composer config -g写入的位置可能失效,推荐统一用COMPOSER_PROCESS_TIMEOUT环境变量










