卡在downloading https://时应调http.timeout,它控制dns解析、tls握手、首字节等待及整个body下载,默认300秒过短,弱网下需设为1200并确保php default_socket_timeout与之匹配。

离线或弱网下 Composer 超时,不能只调一个 process-timeout —— 必须分层干预 HTTP 下载、子进程执行、底层 socket 三道关卡,否则改了也白改。
卡在 Downloading https:// 时该调哪个 timeout
这是 HTTP 请求阶段卡住,比如拉 packages.json 或 ZIP 包,错误里常带 cURL error 28 或反复 retry。它只认 http.timeout,和 process-timeout 完全无关。
-
http.timeout控制 DNS 解析 + TLS 握手 + 首字节等待 + 整个 body 下载的总时间,默认仅 300 秒(5 分钟),弱网下极易触发 - 项目级生效:运行
composer config http.timeout 1200,写入当前composer.json的config段,可提交、可复现 - 全局生效:运行
composer config -g http.timeout 1200,写入~/.composer/config.json - 临时覆盖优先级最高:用
COMPOSER_HTTP_TIMEOUT=1200 composer install,适合 CI 调试
卡在 unzip / git clone / post-install-cmd 时该调哪个 timeout
这是子进程执行太久被杀,错误里一定含 [RuntimeException] The process "" exceeded the timeout,加 -vvv 可看到最后那条命令。它只受 process-timeout 控制,和网络下载无关。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
process-timeout控制单个外部命令最大执行时间,默认 300 秒;解压几百 MB 的 dist 包、跑php artisan config:cache都可能卡在这一步 - 全局改:运行
composer config -g process-timeout 1800 - 项目级改:直接在
composer.json顶层加"config": {"process-timeout": 1200} - CI 环境建议用环境变量兜底:
COMPOSER_PROCESS_TIMEOUT=2000,某些 Composer 版本对它更敏感 - 设为
0表示不限时,但不推荐——万一远程 Git 仓库彻底不可达,会无限挂起
为什么改了 timeout 还是超时?PHP 底层 socket 会提前掐断
即使你把 http.timeout 设成 1200,如果 PHP CLI 的 default_socket_timeout 是默认的 60 秒,cURL 在底层仍会在 60 秒后直接报错,Composer 根本没机会用上你设的值。
- 查当前值:
php -i | grep default_socket_timeout - 若输出是
default_socket_timeout => 60 => 60,就必须改它 - 临时改:启动时加
-d default_socket_timeout=1200,例如php -d default_socket_timeout=1200 composer.phar install - 永久改:编辑
php.ini,找到default_socket_timeout = 60改成1200,然后重启 CLI 环境
离线环境要绕过网络,不是靠 timeout
timeout 解决的是“慢”,不是“没有”。真离线时,http.timeout 再大也没用,必须切断网络依赖路径。
- 先禁用所有远程源:
composer config -g repo.packagist false - 确保所有包已缓存在本地:
vendor/和~/.composer/cache/齐全 - 用
--no-plugins --no-scripts跳过可能触发网络的钩子 - 如果项目用了
"type": "vcs",离线前必须先git clone好对应仓库,并在composer.json中用"path"类型指向本地目录 - 切记:
http.timeout和process-timeout对离线无效,它们只延长等待,不跳过请求
真正容易被忽略的是:弱网下 http.timeout 和 default_socket_timeout 不匹配,或者离线时误以为调大 timeout 就能工作——其实只是让失败来得更晚一点。










