临时应对方案仅在单次命令中生效,不修改配置、不污染环境,适用于ci调试或快速验证超时问题;需组合使用--http-timeout、composer_process_timeout及php -d default_socket_timeout=600等参数覆盖各层超时限制。

临时应对方案只在单次命令中生效,不改配置、不污染环境,适合 CI 调试或快速验证是否真由超时引起。
用 --http-timeout 覆盖网络请求超时
卡在 Downloading https://... 或报 curl error 28 时,说明 HTTP 层没拿到响应。此时 --http-timeout 是唯一有效的参数,单位为秒:
-
composer install --http-timeout=600—— 直接延长单次请求总耗时(含 DNS、TLS、首字节、body 传输) - 不能写成
--timeout=600:它控制的是整个命令生命周期,部分版本已弃用或行为不一致 - 若同时有多个包下载失败,可叠加
--dns-cache-ttl=3600减少重复 DNS 查询
用 COMPOSER_PROCESS_TIMEOUT 应对脚本执行卡死
报错含 The process "xxx" exceeded the timeout 或卡在 Executing command,说明是子进程(如 git clone、unzip、post-install-cmd)超时:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行前设环境变量:
COMPOSER_PROCESS_TIMEOUT=1200 composer install - 设为
0表示不限时(慎用,远程仓库不可达时会永久挂起) -
--timeout对这类错误完全无效,别混用
绕过 PHP 底层 socket 限制
即使设了 --http-timeout=600,仍可能因 PHP CLI 的 default_socket_timeout 提前中断连接:
- 先查当前值:
php -i | grep default_socket_timeout,常见默认是 60 秒 - 强制覆盖:
php -d default_socket_timeout=600 $(which composer) install --http-timeout=600 - 这个组合能堵住绝大多数“明明设了超时却还是 60 秒就断”的情况
临时换镜像源不改全局配置
不想动 ~/.composer/config.json,又想试试阿里云镜像是否真有效:
- 进项目目录后执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/ - 注意:这是项目级配置,会写入当前
composer.json的config段,不影响其他项目 - 验证是否生效:
composer config repo.packagist应输出完整 JSON,不是字符串或空值 - 用完删掉:
composer config --unset repo.packagist
临时方案的关键在于「不持久」——所有改动都在当前 shell 生命周期内,退出即失效。最容易被忽略的是 PHP 自身的 default_socket_timeout,它比 Composer 配置更底层,不显式覆盖就会悄悄掐断连接。










