--timeout=600 用于延长 composer 主流程熔断阈值至10分钟,仅对当前命令生效且必须带等号;它控制依赖解析、下载、解压及脚本执行全过程,但不替代 --http-basic-timeout(管http请求)或 process-timeout(管子进程)。

composer install/update 的 --timeout 参数怎么用
它不是“限制运行时间”,而是延长 Composer 主流程的熔断阈值,默认 300 秒(5 分钟),超时后抛出 ProcessTimedOutException,整个命令终止。
必须带等号,否则静默忽略:composer install --timeout=600 表示最多跑 10 分钟;composer install --timeout 600(无等号)完全无效。
- 该参数只对当前命令生效,不改配置文件,适合 CI/CD 临时调试
- 影响范围是整个命令生命周期:依赖解析 + 下载 + 解压 + 执行脚本(如
post-install-cmd) - 若卡在
Downloading https://...阶段,仅调--timeout不够——此时需同时设--http-basic-timeout=300(Composer 2.2+) - 注意:PHP CLI 的
max_execution_time若被disable_functions禁用,或default_socket_timeout小于你设的 HTTP 超时,仍会提前中断
process-timeout 和 http-basic-timeout 到底管什么
process-timeout 控制子进程执行上限,比如 git clone、unzip、php -r "require '...';" 这类外部命令;http-basic-timeout 专管单次 HTTP 请求(DNS + TLS + 首字节 + body 传输总耗时)。
两者默认都是 300 秒,但作用域完全不同。常见错误是只调高 process-timeout,结果卡在下载 ZIP 包时失败,因为 http-basic-timeout 还是 60 秒(Composer 2.1 及更早版本默认值)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 弱网或大包场景建议同步设高:
composer update --timeout=1800 --http-basic-timeout=300 -
http-basic-timeout在 Composer 2.2+ 才支持,旧版本只能靠换镜像或调--timeout硬扛 - 若项目含私有 Git 仓库(如
git@xxx或https://github.com/org/private),http-basic-timeout对其无效——那是process-timeout在管
环境变量 COMPOSER_PROCESS_TIMEOUT 和 COMPOSER_HTTP_TIMEOUT 哪个优先级高
环境变量优先级高于配置文件和命令行参数(除 --timeout 这类显式覆盖外)。也就是说,COMPOSER_PROCESS_TIMEOUT=0 会让所有 composer install 忽略 process-timeout 配置项,哪怕 composer.json 里写了 "process-timeout": 300。
但要注意隐含行为:COMPOSER_PROCESS_TIMEOUT=0 表示禁用超时,一旦网络卡死或镜像不可用,进程会无限挂起,无法自动退出。
- Docker 容器中设置该变量,需确认没被
docker run --stop-timeout或外层timeout 600 composer install包裹,否则 Composer 还没触发超时就被系统 kill - GitHub Actions 中推荐显式写成:
COMPOSER_PROCESS_TIMEOUT: 900,避免 runner 默认 PHP 配置导致意外中断 -
COMPOSER_HTTP_TIMEOUT是 Composer 2.x 引入的别名,等价于http.timeout(非http-basic-timeout),注意别混淆
为什么 set_time_limit() 在 post-install-cmd 里有时没用
因为 set_time_limit() 只作用于当前 PHP 进程,而 composer install 本身是主进程,它启动的下载、解压等操作全在子进程中——你在主进程里调 set_time_limit(0) 对子进程毫无影响。
但在 post-install-cmd 脚本内部调用是有效的,前提是它在脚本执行早期就触发,且 PHP CLI 没禁用该函数。
- 推荐方式:用
php -d max_execution_time=0 composer install,直接控制整个 PHP 进程的执行时限 - 若脚本是独立 PHP 文件(如
scripts/build.php),可在文件开头加set_time_limit(0),但得确保没被后续逻辑覆盖 - CI/CD 中务必检查系统级限制,比如 GitHub Actions runner 的默认
max_execution_time=300,不显式覆盖就会静默中断
process-timeout 和 http-basic-timeout + 显式用环境变量兜底。单纯加 timeout 只是“等得更久”,解决不了连接不稳定或 DNS 解析慢这类底层问题。










