Laravel 10安装提示openssl缺失,根本原因是CLI模式下PHP未启用openssl扩展:需确认php --ini指向的php.ini中extension=openssl(Linux/macOS)或extension=php_openssl.dll(Windows)已去注释,并执行php -m | grep openssl验证生效。

Laravel 10 安装时提示 openssl 扩展缺失,根本原因是 PHP 运行环境未启用 openssl 模块,而 Laravel 10(及所有现代 Laravel 版本)强制依赖 openssl——它不只是可选,而是贯穿整个安装和运行流程的核心扩展。
这个扩展被用于:
- Composer 下载包(HTTPS 协议通信)
- Laravel 的加密组件(如
Encrypter、Session 加密、JWT 生成) - Artisan 命令中的安全操作(如
key:generate) -
.env配置加载时的敏感数据处理
为什么明明装了 PHP 却还报 openssl 缺失?
常见不是“没装”,而是“没启用”或“没生效”:php.ini 文件有多个,改错了位置
Windows 下 WAMP/XAMPP/PHPStudy 常有两套配置:Apache 使用的php.ini和 CLI(命令行)使用的php.ini。composer create-project走的是 CLI 模式,必须确保 CLI 对应的php.ini启用了 openssl。extension=php_openssl.dll(Windows)或 extension=openssl(Linux/macOS)被注释或拼写错误
Windows 用户常漏掉去掉前面的分号;;Linux/macOS 用户可能写成extension=php_openssl.so(错误)而非extension=openssl(正确)。PHP 版本切换后,扩展路径或配置未同步
比如用 PHPStudy 切换 PHP 7.4 → 8.2,但旧版php.ini仍被读取,或新版本的ext目录里根本没有openssl.so/php_openssl.dll。缺少底层依赖库(Windows 尤其典型)
Apache 场景下,即使php.ini开了php_openssl.dll,若libeay32.dll和ssleay32.dll(或新版libcrypto-*.dll/libssl-*.dll)不在Apache/bin或系统 PATH 中,启动时仍会静默失败。
怎么快速确认并修复?
执行以下三步诊断,比盲目重启更有效:-
检查 CLI 模式是否真启用了 openssl
php -m | grep openssl
有输出
openssl表示已启用;无输出则继续查配置。 -
定位当前 CLI 使用的 php.ini
php --ini
看 “Loaded Configuration File” 路径,打开它,确认含:
extension=openssl ; Linux/macOS ;extension=php_openssl.dll ; Windows,去掉分号
-
验证 openssl 函数是否可用
新建一个test.php:<?php var_dump(function_exists('openssl_encrypt'));浏览器或 CLI 执行,返回
bool(true)才算真正就绪。
不同系统典型修复方式
- **Windows(WAMP/PHPStudy)** 进入软件面板 → PHP 设置 → 扩展管理 → 勾选 `php_openssl`;再确认 PHP 版本已正确切换;必要时手动复制 `php/ext/php_openssl.dll` 对应的 DLL 到 `Apache/bin`。-
Linux(Ubuntu/Debian)
sudo apt update && sudo apt install php8.2-opcache php8.2-mbstring php8.2-xml php8.2-zip php8.2-curl php8.2-openssl sudo systemctl restart apache2 # 或 nginx + php-fpm
-
macOS(Homebrew + PHP 8.2)
brew install php@8.2 echo 'export PATH="/opt/homebrew/opt/php/bin:$PATH"' >> ~/.zshrc source ~/.zshrc # 确保 /opt/homebrew/etc/php/8.2/php.ini 中 extension=openssl 已启用
不复杂但容易忽略


















