win环境php7.2无法加载curl,openssl的问题解决方法

1.执行php -m时,openssl显示已经加载,如图:

在这里插入图片描述
在php.ini中已经开启这个模块
在这里插入图片描述

2.但是在实际使用curl或者openssl相关函数时,却提示没有这种函数,直接报错

Call to undefined function openssl_pkey_get_private()
在这里插入图片描述

3.解决办法
3.1建一个test.php执行var_dump(get_loaded_extensions());首先看看实际的加载情况,看到openssl和curl实际上都没有加载进来

在这里插入图片描述

3.2 无法加载openssl的解决办法

1、正确安装VC库。

2、php7.1版本安装目录中的 libeay32.dlllibssh2.dll 变为了php7.2版本安装目录中的libcrypto-1_1-x64.dlllibssl-1_1-x64.dll

3、查看apache安装目录下的bin文件夹,看是否有libcrypto-1_1-x64.dlllibssl-1_1-x64.dll 两个文件,如果没有需要把php7.2版本安装目录中的libcrypto-1_1-x64.dlllibssl-1_1-x64.dll复制到apache的bin目录下。

作者:大王顶
链接:https://www.jianshu.com/p/5a3d2804031d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3.3 无法加载curl的解决办法

通常,这是Apache和PHP之间的OpenSSL版本不匹配错误。如果Apache将PHP作为DSO模块加载,则将使用其自己的OpenSSL版本(dll和libs)。因此,如果PHP扩展需要较新的版本,则它可能无法在Apache加载的DLLS中找到适当的接口,并且将无法正常工作。

由于需要加载PHP扩展,因此需要相关的DLL文件至少是PHP模块要求的版本。假设您正在为Apache和PHP使用最新的版本,并且都使用相同的MVC版本构建,则可以

复制以下文件:

libcrypto-1_1.dll
libcrypto-1_1-x64.dll
libcurl.dll
libsasl.dll
libssh2.dll
libssl-1_1.dll
libssl-1_1-x64.dll
nghttp2.dll
libeay32.dll(如果您的PHP发行版中存在)
ssleay32.dll(如果您的PHP发行版中存在)

从PHP根文件夹到Apache2 / bin文件夹,重启Apache即可

以防万一您确信PHP构建比Apache构建新。

在相反的情况下,您可以将相同的文件从Apache BIN复制到PHP根目录。

无论如何,请事先备份APache和PHP文件夹的内容。

将PHP路径添加为环境变量将优先使用该路径来加载相关DLL,并且可以解决该问题。但是,您将失去服务器的可移植性。此外,如果您还添加了Apache PATH作为变量,并且OpenSSL版本有所不同(最多加载不同的链接DLL文件),则可能会发生很多问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值