如果你是 Laravel 框架的项目,缺少openssl可能提示如下错误:
Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()
其他框架类似,本质都是环境中缺少 openssl 依赖。
那么是php环境还是Apache环境呢?
各个版本的php都会自带openssl加密模块的,只需要在php.ini启用即可:
extension=php_openssl.dll
首先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
这篇文章还没有评论