根本原因是PHP加载扩展时缺失底层依赖DLL(如vcruntime140.dll、libcrypto-1_1-x64.dll),而非扩展文件本身路径错误;需按Compiler版本安装匹配VC++运行库、将OpenSSL DLL置于PHP根目录、确保extension_dir为绝对路径且启用语法正确,并将PHP根目录加入系统PATH后重启环境。

PHP 报“Unable to load dynamic library”或运行时弹窗提示“缺少 xxx.dll”,根本不是扩展文件(如 php_curl.dll)没放对位置,而是 PHP 启动或加载扩展过程中,底层依赖的 DLL(比如 vcruntime140.dll、libcrypto-1_1-x64.dll、libssh2.dll)压根没被系统找到。修复需分层处理:先保主程序能跑,再让扩展能用,最后确保调用不崩溃。
确认 PHP 编译环境与 VC 运行库匹配
这是最常被跳过的一步,但决定后续所有操作是否有效:
- 运行
php --info | findstr "Compiler"(Windows CMD)或打开phpinfo()页面,查找 Compiler 行,明确是MSVC15(VS2017)、MSVC16(VS2019)还是MSVC17(VS2022) - 对应下载微软官方
vc_redist.x64.exe(即使你用的是 32 位 PHP,phpEnv 等轻量包默认运行在 x64 系统环境,优先装 x64 版):
→ VC++ 2015–2022 x64 运行库 - 以管理员身份运行安装,安装后重启电脑;验证
C:\Windows\System32\vcruntime140.dll(VC15/16)或vcruntime140_1.dll(VC17)是否存在
补全 OpenSSL 及扩展依赖 DLL 到 PHP 根目录
curl、openssl、ldap 等扩展报错,90% 源于 OpenSSL 1.1+ 运行时缺失,且不能靠复制旧版 ssleay32.dll 解决:
- 从 windows.php.net 下载与你 PHP 版本完全一致的 ZIP 包(如
php-8.2.12-Win32-vs16-x64.zip) - 解压后,将同级目录下的
libcrypto-1_1-x64.dll和libssl-1_1-x64.dll(PHP 8.2+ 多为-x64后缀)直接复制到你的phpEnv\php\目录下——即和php.exe在同一层,不是 放进ext/或System32 - 若仍报错,用 Dependencies.exe 打开
php_curl.dll,看红色标记缺失项,针对性补全(如libssh2.dll也需放 PHP 根目录)
检查 extension_dir 路径与扩展启用方式
路径写错或启用语法过时,会让 PHP “看见却不用”扩展:
立即学习“PHP免费学习笔记(深入)”;
- 打开生效的
php.ini(用php --ini确认路径),定位extension_dir行 - 必须写绝对路径 + 正斜杠 + 无中文空格,例如:
extension_dir = "D:/phpEnv/php/ext"(✅)extension_dir = "D:\phpEnv\php\ext"(❌ 反斜杠易被转义)extension_dir = "./ext"(❌ phpEnv 对相对路径解析不稳定) - 确认该路径下真实存在目标文件,如
php_curl.dll;PHP 8.0+ 启用扩展应写extension=curl(去后缀),而非extension=php_curl.dll
把 PHP 根目录加入系统 PATH 并重启环境
很多用户配好了 extension_dir 却仍失败,是因为扩展依赖的 DLL(如 libssh2.dll)不在系统搜索路径中:
- 进入「控制面板 → 系统 → 高级系统设置 → 环境变量」
- 在「系统变量」中编辑
Path,新增一行:C:\phpenv\php\php-8.2.12-Win32-vs16-x64(替换成你实际的 PHP 安装根目录,不含 \ext) - 保存后,关闭所有已打开的 CMD/PowerShell/IDE 窗口,重新打开终端,运行
where vcruntime140.dll,若返回该 PHP 目录下的路径,说明生效 - 重启 Apache/Nginx/php-fpm 服务,或重启 phpEnv 控制面板



















