“unsupported protocol”错误主因是php环境缺失openssl扩展、allow_url_fopen被禁用,或git/ssh协议依赖未满足;需启用openssl、开启allow_url_fopen、配置https镜像或强制github-protocols为https,--ignore-platform-reqs对此无效。

Composer install 报 “Unsupported protocol” 错误怎么修
这不是网络不通,而是 Composer 尝试用不被当前 PHP 环境支持的协议拉包——最常见的是 https:// 协议被禁用,或 git://、ssh:// 等协议没装对应扩展。
典型错误信息长这样:Failed to clone https://github.com/vendor/package.git via https, ssh protocols, aborting. 或直接报 Unsupported protocol: https。
- 先确认 PHP 是否启用了
openssl扩展(https依赖它):php -m | grep openssl,没输出就说明缺失 - 检查是否禁用了 URL fopen:
php -i | grep allow_url_fopen,值为Off会导致所有 HTTP 协议失败 - 如果 composer.json 或 composer.lock 里有
git://源(老项目常见),而本地没装git命令或 PHP 没启用proc_open,也会触发该错 -
composer config --global repo.packagist composer https://packagist.org这类手动配置若写成http://(非https://),在新版 Composer 中会被拒绝
如何让 Composer 降级使用 HTTP 协议(临时绕过)
仅限调试或内网离线环境,生产环境别用。HTTP 不加密,且 Packagist 已强制 HTTPS,所以这招只对私有仓库或镜像源有效。
执行前确保镜像源本身支持 HTTP:
- 切到 HTTP 镜像(如阿里云 HTTP 镜像):
composer config -g repo.packagist composer http://mirrors.aliyun.com/composer/ - 禁用 HTTPS 强制校验(危险!):
composer config -g secure-http false - 再跑
composer install—— 此时它会尝试走 HTTP,但遇到需要 SSL 的包仍会失败
注意:secure-http false 不影响 https:// 协议本身,只放开对源地址协议的校验;真正起作用的是你配的镜像地址协议。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Git 协议失败时改用 HTTPS 替代
很多私有 Git 仓库(如自建 Gitea、GitLab)默认禁用 git://,但开了 HTTPS 克隆入口。Composer 默认优先用 git://,失败后才 fallback 到 HTTPS —— 你可以强制跳过 git 协议。
- 全局禁用 git 协议:
composer config -g github-protocols https - 或针对单个项目,在
composer.json里加:"config": { "github-protocols": ["https"] } - 如果还报错
Failed to execute git clone,检查git命令是否在$PATH中:which git
改完别忘了删掉 vendor/ 和 composer.lock(如果 lock 里已记录 git 协议地址),否则 Composer 会继续按旧地址重试。
为什么 --ignore-platform-reqs 对协议错误完全无效
--ignore-platform-reqs 只跳过 PHP 版本、扩展等“平台要求”,不干预协议层行为。它不管你是用 https:// 还是 git://,也不修复 openssl 缺失或 allow_url_fopen=Off 这类底层限制。
真正要动的是 PHP 配置或 Composer 的源策略。最容易被忽略的一点:Docker 容器里常默认关闭 allow_url_fopen,且不装 openssl 扩展,光加 --ignore-platform-reqs 只会让错误从“协议不支持”变成“连接超时”或“空响应”。










