phpenv需手动启用openssl扩展:定位对应版本的php.ini,取消extension=openssl或extension=php_openssl.dll注释;复制libssl-1_1.dll和libcrypto-1_1.dll至php目录或system32;配置openssl.cafile指向有效cacert.pem;重启服务并实测加密与https请求。

phpEnv 是 Windows 下轻量级的 PHP 集成环境(类似 PHPStudy 早期版本),默认不启用 openssl 扩展,但它本身不提供图形化开关——所有扩展启用都依赖手动编辑配置文件。如果你遇到 openssl_encrypt() 返回 false、file_get_contents("https://") 报 SSL 错误、或 Composer 报 “Unable to load CA bundle” 等问题,核心就是扩展未真正加载或依赖缺失。
确认 phpEnv 当前 PHP 版本和 php.ini 路径
phpEnv 多版本共存,不同 PHP 版本对应独立的 php.ini,改错文件等于白做。
运行以下命令定位真实生效的配置:
php --ini
输出类似:
Configuration File (php.ini) Path: C:\phpEnv\php\php-8.1.22-Win32-vs16-x64\php.ini
注意路径中带版本号的目录,这就是你要编辑的文件。别去 C:\phpEnv\php\php.ini(那是模板或旧版残留)。
在 php.ini 中启用 extension=openssl
打开上一步确认的php.ini 文件,搜索以下任意一行:
-
;extension=openssl(PHP 7.2+ 推荐写法) -
;extension=php_openssl.dll(旧版或部分 phpEnv 打包习惯)
取消注释(删掉开头的分号 ;),确保只保留其中一行,且不要同时存在两行。
保存后,必须重启 phpEnv 的 Apache 或 Nginx 服务——不是点“重启服务”按钮就完事,要确认进程已终止并重新拉起(可任务管理器看 httpd.exe 或 nginx.exe 是否有新 PID)。
Windows 下 dll 依赖缺失是常见静默失败原因
即使extension=php_openssl.dll 已启用,php -m | findstr openssl 仍无输出,大概率是 DLL 找不到运行时依赖。
phpEnv 自带的 php_openssl.dll 依赖系统级的 libssl-1_1.dll 和 libcrypto-1_1.dll(OpenSSL 1.1.x),但 Windows 默认不带这些。
检查方法:用 Dependency Walker 或 ldd(WSL)打开 php_openssl.dll,看是否报 libssl-1_1.dll missing。
解决方式(二选一):
- 将
phpEnv\php\php-*.dll目录下的libssl-1_1.dll和libcrypto-1_1.dll复制到C:\Windows\System32(64 位系统)或C:\Windows\SysWOW64(32 位 PHP) - 或更稳妥:把这两个 DLL 和
php_openssl.dll放在同一目录(即phpEnv\php\php-8.1.22-Win32-vs16-x64\),并在php.ini中显式设置:
extension_dir = "C:/phpEnv/php/php-8.1.22-Win32-vs16-x64/"
验证 openssl 是否真正可用,不止是“已加载”
仅靠php -m | grep openssl 或 phpinfo() 显示 enabled 不够。必须实测加密和 HTTPS 请求:
创建 test_openssl.php:
<?php var_dump(extension_loaded('openssl'));
var_dump(openssl_encrypt('test', 'aes-256-cbc', '12345678901234567890123456789012', 0, str_repeat("\0", 16)));
var_dump(file_get_contents('https://httpbin.org/get', false, stream_context_create(['http' => ['timeout' => 5]])));
?>
三个 var_dump 都应输出非 false 值。若第三项报 SSL operation failed,说明 CA 证书路径未配置,需在 php.ini 加:
openssl.cafile="C:/phpEnv/cacert.pem"
然后下载最新 cacert.pem(从 https://curl.se/ca/cacert.pem),放对应路径。
phpEnv 没有自动证书管理,CA 文件过期或路径错一个字符,HTTPS 就会静默失败——这是最容易被忽略的环节。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











