必须同步调高PHP的max_execution_time、default_socket_timeout及Composer的http.timeout三处配置,否则Composer在宝塔中执行仍会超时。

Composer 在宝塔面板里执行超时,根本不是改 composer.json 就能解决的——它卡在系统级网络请求和 PHP 运行限制上,必须同步调高三处:PHP 的 max_execution_time、default_socket_timeout,以及 Composer 自身的 http.timeout 配置。
为什么 composer install/update 总是卡在 downloading 或 timeout?
常见错误现象包括:file_get_contents(): SSL: Connection timed out、Failed to download vendor/package: file could not be downloaded (Connection timed out),或直接卡住 300 秒后报错。这不是 Composer 本身慢,而是底层 PHP 网络流(stream)被强制中断,或者 PHP 脚本运行时间到了上限被 kill。
- 宝塔默认 PHP 的
max_execution_time = 300(5 分钟),但 Composer 下载大包(如 Laravel、Symfony 组件)常需更久 - PHP 的
default_socket_timeout = 60控制所有fopen()/file_get_contents()类网络请求,默认 60 秒,Composer 底层大量依赖这个 - Composer 自己的 HTTP 超时默认仅 300 秒,且不自动继承 PHP 的 socket 设置
改 PHP 配置:max_execution_time 和 default_socket_timeout
这两项必须一起调大,否则只改一个照样失败。进宝塔【软件商店】→ 找到你正在用的 PHP 版本(如 PHP 8.2)→ 【设置】→ 【配置修改】:
- 找到
max_execution_time = 300,改成max_execution_time = 1200(20 分钟) - 找到
default_socket_timeout = 60,改成default_socket_timeout = 300(5 分钟);若该行不存在,就在[PHP]段落末尾手动添加 - 保存后点击【重载配置】——注意:这里「重载」即可,不用重启 PHP,因为这是 ini 解析参数,非 FPM 进程级配置
改 Composer 全局 http.timeout
Composer 的超时是独立控制的,靠环境变量或全局 config。推荐用全局 config,避免每次命令加参数:
- SSH 登录服务器,执行:
composer config -g http.timeout 600 - 同时建议一并设置重试次数:
composer config -g github-oauth.github.com "your_token"(如有私有库)和composer config -g process-timeout 0(设为 0 表示禁用进程级超时,交由 PHP 层控制) - 验证是否生效:
composer config -g http.timeout应输出600
额外注意:.user.ini 不生效,别用它配 Composer
很多人想在网站根目录下建 .user.ini 来覆盖 PHP 设置,但 Composer 是在命令行(CLI)模式下运行的,它**完全不读取 .user.ini**——CLI SAPI 忽略所有 user_ini.filename 相关配置。所以:
- 别在网站目录下改
.user.ini试图调高超时,那对composer install没有任何作用 - CLI 模式只认 php.ini 主配置,也就是你在宝塔软件商店里改的那个文件
- 如果你用的是宝塔计划任务跑 Composer(比如自动更新依赖),更要确认该任务执行时用的是哪个 PHP CLI 二进制——默认是
/www/server/php/82/bin/php,它的 php.ini 路径可通过/www/server/php/82/bin/php --ini查看
真正容易被忽略的一点:Composer 执行时如果用了代理(比如公司内网或镜像源配置了 proxy),而 proxy 本身不稳定,http.timeout 再大也白搭。先用 curl -v https://packagist.org/packages.json 测试基础连通性,再动配置。


















