win环境php7.2无法加载curl,openssl的问题解决方法
在win7或者win10搭建php开发环境遇到一些奇怪的问题
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.dll 及 libssh2.dll 变为了php7.2版本安装目录中的libcrypto-1_1-x64.dll 及 libssl-1_1-x64.dll。
3、查看apache安装目录下的bin文件夹,看是否有libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 两个文件,如果没有需要把php7.2版本安装目录中的libcrypto-1_1-x64.dll 及 libssl-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文件),则可能会发生很多问题。