卡在Downloading https://就调http-timeout,不是process-timeout;http-timeout控制HTTP请求全周期(DNS、TLS、首字节、下载),默认300秒,需同步调高PHP的default_socket_timeout和http.connect_timeout,并检查DNS、代理及镜像可用性。

卡在Downloading https://就调http-timeout,不是process-timeout
看到Could not fetch https://repo.packagist.org/packages.json、curl error 28,或卡在Downloading https://mirrors.aliyun.com/xxx.zip不动,说明是HTTP层卡住——此时process-timeout完全不生效,它只管git clone、unzip这类子进程。
http-timeout控制所有Composer发起的HTTP请求(拉元数据、下ZIP包)最大等待秒数,默认300秒。弱网下DNS慢、TLS握手卡、镜像首字节延迟高,都可能触发它。
- 项目级:运行
composer config http-timeout 600,写入当前composer.json的"config"段,可提交、可复现 - 全局:运行
composer config --global http-timeout 600,写入~/.composer/config.json - 临时最高优先级:
COMPOSER_HTTP_TIMEOUT=1200 composer install
卡在Installing dependencies或报The process timed out?该调process-timeout
错误里明确含[RuntimeException] The process timed out.,加-v能看到最后执行的命令(比如git clone https://github.com/laravel/framework.git),这就是process-timeout在起作用。
它只控制子进程执行时长(git、unzip、php artisan optimize等),和网络下载无关。默认300秒,内网私有仓库或大Git repo很容易超。
- 全局设高:运行
composer config --global process-timeout 1800 - 项目级:在
composer.json顶层加"config": {"process-timeout": 1200} - 临时覆盖:
COMPOSER_PROCESS_TIMEOUT=2000 composer install
为什么设了http-timeout还超时?PHP底层default_socket_timeout可能更早掐断
即使http-timeout设成1200,若PHP CLI的default_socket_timeout是60,连接会在60秒时被硬中断——这不是Composer的问题,是PHP自己先放弃了。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
查当前值:php -i | grep default_socket_timeout。常见值为60或更低,必须同步调高。
- 临时绕过:
php -d default_socket_timeout=1200 $(which composer) install - 长期方案:用
php --ini查CLI专用php.ini路径,改其中default_socket_timeout和max_execution_time
别漏掉http.connect_timeout和concurrent.http
http-timeout管的是整个HTTP请求生命周期,但TCP建连阶段(DNS解析、TLS握手)可能被更短的http.connect_timeout掐掉,默认常为10秒,在弱网下极易失败。
concurrent.http控制并发请求数,默认可能过高,导致代理或防火墙限流,尤其在内网或低带宽环境。
- 建连超时建议设为30:
composer config --global http.connect_timeout 30 - 并发请求数建议降为1:
composer config --global concurrent.http 1 - 注意:
timeout(无前缀)在新版中行为不一致,统一用带http.前缀的写法更稳妥
真正麻烦的从来不是参数没设对,而是PHP底层socket超时、DNS缓存污染、代理配置缺失、镜像源本身不可用这些“看不见”的环节。调参数只是把问题暴露得更清楚,而不是掩盖它。

















