天问

php7.4+Apache 缺少openssl解决方法

如果你是 Laravel 框架的项目,缺少openssl可能提示如下错误:

Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

其他框架类似,本质都是环境中缺少 openssl 依赖

那么是php环境还是Apache环境呢?

(1)php开启openssl扩展

各个版本的php都会自带openssl加密模块的,只需要在php.ini启用即可:

extension=php_openssl.dll

(2) Apache开启openssl扩展

首先web容器是Apache,在处理.php文件请求时候,才会加载php模块处理。但是由于php是以 php_module 的方式注入apache,而不是php占用一个端口监听,Apache反向代理的标准方式。加载php模块的时候,php环境中的dll就找不到了。

网上大多方案都是复制 libeay32.dll和ssleay32.dll 到apache目录,或者到system32目录,这种机械式的回答很让人无语。因为在php7以后这种方案就失效了!

我的apache24环境中包含了 libeay32.dll和ssleay32.dll ,但是依然提示缺少openssl。问题出在哪呢?

原因很简单,php5.6等版本安装目录里面openssl 相关的dll为 libeay32.dll和ssleay32.dll ,而 php7.4 等版本安装目录没有这两个dll,取而代之的是 libcrypto-1_1-x64.dll,libssl-1_1-x64.dll ,知道问题了解决就很简单了:

只需要把 php 安装目录中的 libcrypto-1_1-x64.dll,libssl-1_1-x64.dll 复制到 Apache 安装环境中的 bin 目录

总结:

php5.6方案:

复制 libeay32.dll和ssleay32.dll 到apache目录。

php7.4方案:

复制 libcrypto-1_1-x64.dll,libssl-1_1-x64.dll 到 apache目录。

博客地址:http://blog.yoqi.me/?p=17631
扫我捐助哦
喜欢 1

这篇文章还没有评论

发表评论