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

在win7或者win10搭建php开发环境遇到一些奇怪的问题

        • 1.执行php -m时,openssl显示已经加载,如图:
        • 2.但是在实际使用curl或者openssl相关函数时,却提示没有这种函数,直接报错
        • 3.解决办法
          • 3.1建一个test.php执行var_dump(get_loaded_extensions());首先看看实际的加载情况,看到openssl和curl实际上都没有加载进来
          • 3.2 无法加载openssl的解决办法
          • 3.3 无法加载curl的解决办法
            • 复制以下文件:
            • 从PHP根文件夹到Apache2 / bin文件夹,重启Apache即可

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

win环境php7.2无法加载curl,openssl的问题解决方法_第1张图片
在php.ini中已经开启这个模块
win环境php7.2无法加载curl,openssl的问题解决方法_第2张图片

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

Call to undefined function openssl_pkey_get_private()
win环境php7.2无法加载curl,openssl的问题解决方法_第3张图片

3.解决办法

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

win环境php7.2无法加载curl,openssl的问题解决方法_第4张图片

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文件),则可能会发生很多问题。

你可能感兴趣的:(web服务器搭建)