本地开发需同时配置http.timeout(控制HTTP请求总时长,建议600)和process-timeout(控制git clone/unzip等子进程,建议1200),并同步调高PHP的default_socket_timeout以避免底层中断。

本地开发该设哪几个 timeout 参数
本地开发最常卡在两个地方:拉包时卡在 Downloading https://,或执行 git clone / unzip 时被杀。对应必须配齐两个参数:http.timeout(管 HTTP 请求)和 process-timeout(管外部命令)。只改一个,大概率还是失败。
-
http.timeout控制 DNS 解析 + TLS 握手 + 首字节等待 + 整个 body 传输总时长,默认仅 300 秒,弱网或镜像响应慢时极易触发 cURL error 28 -
process-timeout控制单个外部进程(如git clone、php -r "copy(...)")最大执行时间,默认也是 300 秒,私有 GitLab 或大体积包(如laravel/sail)很容易超 - 二者单位都是秒,值必须是整数,不能写成字符串:
"http.timeout": "600"❌ 会被 Composer 静默忽略
用 composer config 写入项目级配置最稳妥
项目级配置写进当前目录的 composer.json 的 config 段,可提交、可复现、不污染全局环境,适合本地开发日常使用。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config http.timeout 600→ 写入"http.timeout": 600 - 运行
composer config process-timeout 1200→ 写入"process-timeout": 1200 - 改完后检查:直接打开
composer.json,确认字段拼写准确(注意是连字符,不是下划线或驼峰) - 验证是否生效:运行
composer config http.timeout和composer config process-timeout,有数字输出即成功;无输出说明没写对位置或格式错
别忘了 PHP 底层 socket 超时这个隐形天花板
就算你把 http.timeout 设到 1200,如果 PHP 自身的 default_socket_timeout 是默认 60,Composer 还是会在 60 秒被掐断——这个值 Composer 完全不控制,必须手动调。
- 查当前值:
php -i | grep default_socket_timeout - 临时改(当前终端有效):
php -d default_socket_timeout=600 /usr/bin/composer install - 永久改:编辑对应 PHP 版本的
php.ini(如宝塔里是/www/server/php/82/etc/php.ini),搜default_socket_timeout,改成600,然后重启 PHP - 注意:宝塔面板中
composer默认用系统 PHP(/usr/bin/php),不是你网站设置的版本,务必确认改的是同一个 PHP 的php.ini
验证配置真起作用的关键动作
写进文件只是第一步,真正难的是确认它在对的时机、被对的组件读取。最可靠的验证方式是加 -vvv 看日志,而不是只看 composer config 输出。
- 运行
composer install -vvv,留意开头几行是否出现Running update with --timeout=1200(仅当用了--timeout参数时) - 重点观察卡点:如果停在
Downloading https://mirrors.aliyun.com/composer/packages.json,说明http.timeout没生效;如果停在Executing command (CWD: /path): git clone,说明得看process-timeout - 中断重试前必须清理残留:
rm -f vendor/autoload.php && rm -rf vendor/composer/,否则破损 ZIP 或卡死临时目录会持续干扰 - CI 或宝塔里还要防其他层覆盖:比如
timeout命令、Docker--stop-timeout、GitHub Actions 的timeout-minutes,那些 Composer 根本看不见

















