答案是PHP未启用openssl扩展,需通过php -m | grep openssl确认是否加载,再编辑对应php.ini取消;extension=openssl注释并重启环境。

Composer 报错 “The openssl extension is required for SSL/TLS protection” 就是 PHP 缺少或未启用 openssl 扩展,不是 Composer 本身的问题,得从 PHP 配置入手。
怎么确认 openssl 扩展确实没加载
运行 php -m | grep openssl(Linux/macOS)或 php -m(Windows,手动找),如果没输出 openssl,说明扩展未启用;也可能是根本没编译进 PHP。再执行 php -i | grep "openssl",若无任何结果,基本可断定缺失。
- 注意区分:
php -v显示的是 CLI 版本,而 Web 服务器(如 Apache/Nginx)用的可能是另一个 PHP 配置,phpinfo()页面看到的才是 Web 环境真实状态 - 常见陷阱:装了多个 PHP 版本(比如系统自带 + Homebrew + XAMPP),
composer调用的 PHP 和你终端敲php的可能不是同一个 - 检查当前 composer 使用的 PHP:运行
composer config --global --list | grep -i php,或直接看which php和composer diagnose输出的第一行 “PHP version”
Linux/macOS 下启用 openssl 扩展(以常见发行版为例)
多数现代 Linux 发行版的 PHP 包默认含 openssl,但扩展配置文件可能被注释或未加载。先定位 php.ini:运行 php --ini,看 “Loaded Configuration File”。然后编辑该文件:
- 查找是否存在
extension=openssl或extension=php_openssl.dll(Windows 才用 dll)—— Linux/macOS 是.so,一般不用写全名,直接extension=openssl即可 - 如果整行被分号注释(
;extension=openssl),删掉开头的; - 某些系统(如 Ubuntu)把扩展配置拆到
conf.d/目录,检查/etc/php/*/cli/conf.d/10-opcache.ini同级是否有20-openssl.ini,内容是否为extension=openssl - 改完后必须重启 CLI 或 Web 服务:
php -m再验,或重启 Apache/Nginx
Windows 下常见问题与修复
WAMP/XAMPP/PhpStudy 等集成环境常默认禁用 openssl,且路径容易出错。
- 打开
php.ini(通常在C:\wamp64\bin\php\php{version}\php.ini或类似路径),搜索php_openssl.dll - 确保
extension_dir指向正确目录,例如extension_dir = "ext"(相对路径)或绝对路径如extension_dir = "C:\wamp64\bin\php\php8.2.12\ext" - 取消注释
;extension=php_openssl.dll→ 改成extension=php_openssl.dll - 检查
libeay32.dll和ssleay32.dll(旧版)或libcrypto-*.dll/libssl-*.dll(新版)是否存在于 PHP 根目录或System32—— 缺失会导致 extension 加载失败但不报明错,只静默忽略 - 修改后务必重启所有相关服务(Apache、CLI 终端也要新开)
Mac 上用 Homebrew 安装 PHP 仍缺 openssl 怎么办
Homebrew 的 php 公式默认依赖 openssl@3,但有时链接断裂或 pkg-config 找不到头文件,导致编译时跳过 openssl 支持。
- 先重装依赖:
brew reinstall openssl@3,再重装 PHP:brew reinstall php - 验证:
php -r "print_r(openssl_get_cipher_methods());"—— 若报Call to undefined function openssl_get_cipher_methods(),说明扩展真没加载成功 - 检查
php --ini对应的php.ini中是否已有extension=openssl;没有就加,并确认extension_dir指向$(brew --prefix php)/lib/php/20220829这类实际路径(版本号随 PHP 版本变) - 极少数情况需手动指定 OpenSSL 路径编译 PHP,但日常使用几乎不需要,优先走重装流程
真正卡住的地方往往不是“要不要开 openssl”,而是“哪个 php.ini 被读了”“哪个 php 实例在跑 composer”“dll/so 文件到底在不在预期位置”。多用 php --ini、php -m、composer diagnose 交叉验证,比盲目改配置更省时间。










