答案是php curl扩展未启用openssl支持,需验证php -m | grep curl和openssl输出、检查curl_version()中curl_version_ssl标志、确认disable-tls未启用,并确保镜像url格式正确。

“Protocol https not supported” 或 “Unsupported protocol” 报错,99% 是 PHP 的 cURL 扩展没加载 OpenSSL 支持,不是 Composer 配置问题,也不是网络不通。
确认 PHP cURL 是否真支持 HTTPS
Composer 启动时第一件事就是用 cURL 发起 HTTPS 请求,如果底层不支持,连 DNS 解析都不会触发。必须验证真实环境:
- 运行
php -m | grep curl,无输出说明curl扩展根本没启用 - 运行
php -m | grep openssl,无输出说明openssl扩展缺失 - 运行
php -r "var_dump(curl_version()['features'] & CURL_VERSION_SSL);",输出为int(0)表示编译时未链接 OpenSSL - Windows 用户检查
php.ini中是否取消注释了extension=php_curl.dll和extension=php_openssl.dll
检查 Composer 全局配置是否主动禁用 TLS
即使 PHP 环境正常,disable-tls true 这个配置也会让 Composer 强制降级所有请求为 HTTP,再转给不支持 HTTPS 的 cURL 就直接崩。它比 secure-http 更底层、更危险:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config -g disable-tls,若输出true,立刻执行composer config -g --unset disable-tls - 这个配置一旦存在,所有镜像源(包括
https://mirrors.aliyun.com/composer/)都会被无视并强制走 HTTP -
composer clear-cache对它完全无效——它在请求构造阶段就失败了
验证镜像源 URL 是否符合 Composer 2.5+ 规则
URL 写错一个字符,Composer 就会 fallback 到官方源,而你可能根本没意识到镜像没生效:
- 运行
composer config -g repo.packagist,输出必须是完整 JSON 对象,例如:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"} - 键名必须是
repo.packagist(单数、全小写),写成repos.packagist或repositories会静默失败 - URL 必须以
/结尾,否则 Composer 2.5+ 会拼出/composerpackages.json导致 404 - type 值必须显式写为
composer,命令末尾不能省略:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
区分系统 cURL 和 PHP 绑定的 cURL 版本
你在终端跑 curl -I https://mirrors.aliyun.com/composer/packages.json 成功,不代表 PHP 也能行——MAMP、XAMPP、Docker Alpine、自制 PHP 都常出现两者版本或编译选项不一致:
- Linux/macOS:运行
which curl和php -r 'echo curl_version()["version"] . "\n";'对比版本号 - Alpine 容器:确保安装了
curl-dev和openssl-dev,或直接换用php:8.2-cli-alpine3.20这类预编译好 OpenSSL 的镜像 - Docker 中若用
FROM php:8.2-cli,需额外执行apt-get update && apt-get install -y php-curl php-openssl
最容易被忽略的是:错误发生在请求发起前,所有「重试」「调超时」「清缓存」「换源」操作都无效——必须先确认 curl 和 openssl 在 CLI 环境下真实可用,且 disable-tls 不存在,再谈其他。










