必须将libcrypto-1_1-x64.dll和libssl-1_1-x64.dll复制到phpEnv的PHP安装目录(即php.exe所在目录),确保与php_openssl.dll同源版本且架构匹配,否则会触发0xc000007b错误或SSL初始化失败。

直接放 libcrypto-1_1-x64.dll 到 PHP 运行目录就能解决,但必须匹配 phpEnv 的架构和 OpenSSL 版本,否则会触发 0xc000007b 错误或 SSL 初始化失败。
确认 phpEnv 是 64 位还是 32 位
phpEnv 自带的 PHP 可执行文件决定了需要哪个 DLL 版本:
- 打开命令行,运行
php -v,如果输出中含Thread Safety => disabled且无x86字样,大概率是 64 位;更可靠的方式是用file工具(如 PowerShell)查:Get-Item "D:\phpEnv\php\php.exe" | ForEach-Object {$_.VersionInfo.ProductVersion},再结合任务管理器“详细信息”页看 php.exe 的“平台”列 - phpEnv 默认安装包多为 64 位,对应必须用
libcrypto-1_1-x64.dll;若你手动替换成 32 位 PHP,则需改用libcrypto-1_1.dll(无-x64后缀) - 混用会导致 PHP 启动时直接报错
PHP Startup: Unable to load dynamic library 'openssl',或 Apache/Nginx 子进程崩溃
DLL 文件该放哪?别碰系统目录
phpEnv 是便携式环境,所有依赖应放在其自身目录下,而非 C:\Windows\System32:
- 将下载好的
libcrypto-1_1-x64.dll和配套的libssl-1_1-x64.dll一起复制到D:\phpEnv\php\(即php.exe所在目录) - 确保这两个 DLL 文件与 phpEnv 内置的
php_openssl.dll来自同一 OpenSSL 版本分支(例如都是 1.1.1w 或都是 1.1.0l),版本错配会引发SSL routines::unsupported protocol - 不要把 DLL 放进
ext/目录——那是放 PHP 扩展的,不是放 OpenSSL 运行时依赖的
验证 OpenSSL 是否真加载成功
光不报错不等于能用,得实测加密功能:
立即学习“PHP免费学习笔记(深入)”;
- 运行
php -m | findstr openssl,确认openssl在已启用模块列表中 - 执行
php -r "print_r(openssl_get_cipher_methods());",若返回数组说明基础调用通;若报Call to undefined function openssl_get_cipher_methods(),说明 DLL 虽加载但符号未解析,大概率是 ABI 不兼容(比如用了 OpenSSL 3.x 的 DLL 配 PHP 7.4) - 常见陷阱:某些第三方打包的
libcrypto-1_1-x64.dll剥离了调试符号或被加壳,PHP 加载后无法定位函数入口,此时需换回官方编译版(如从 Shining Light OpenSSL 下载 Win64 通用版)
最易被忽略的是 DLL 的依赖链:libcrypto-1_1-x64.dll 本身可能依赖 vcruntime140.dll 或 msvcp140.dll。如果 phpEnv 运行时报错 “找不到指定模块”,先用 Dependency Walker 或 dumpbin /dependents 检查缺失的 VC 运行时,而不是急着换 OpenSSL 版本。



















