Loading... ### 引言 我在安装`composer`的时候,出现了一个报错。 ![下载Composer失败,提示缺少扩展](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/890493408.png) > The openssl extension is missing, which means that secure HTTPS transfers are impossible. > If possible you should enable it or recompile php with --with-openssl 提示我需要安装`openssl`扩展,但官方给的建议是重新编译。 已经安装完的`php`脚本,重新编译太麻烦了,花的时间也太久了。 好在我们的源码包还没有删掉,可以直接安装扩展。 #### 传送门 ```shell # 进入指定扩展目录 cd /server/data/packages/php-8.3.0/ext/openssl/ # 如果config.m4文件不存在,复制config0.m4文件名 cp config0.m4 config.m4 # 创建预编译文件 /server/php/8.3.0/bin/phpize # 开始预编译 ./configure --with-php-config=/server/php/8.3.0/bin/php-config # 编译及安装 make make install # 修改配置文件(开启扩展) vim /server/php/8.3.0/etc/php.ini ``` ### 一、找到源码包下扩展的目录 首先确定好,你的源码包目录仍然存在,这一点很重要。 如果不存在,请下载与你当前`php`脚本一致的源码包。 在你的源码包内,找到`ext/`目录,这个就是你所有`php`基础扩展的目录了。 ![请输入图片描述](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/2536519658.png) ### 二、进行扩展包的编译 然后,需要先进入此目录 比如:我现在缺少的是`OpenSSL`扩展,那就需要进入`源码包/ext/openssl` 如果你缺少的是其他的扩展,就需要进入其他的目录,结构类似。 ![进入指定扩展包的目录](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/1674429273.png) #### 1. 尝试创建预编译脚本 从上图看到,这个包下面,是没有`configure`文件的。 这个就没有办法直接上来就进行预编译,只能先通过`php`提供的`phpize`的脚本,来创建出一个预编译的脚本文件。 我们尝试用`phpize`命令进行创建 #### 2. 出现找不到文件的问题 ![报错,找不到config.m4文件](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/4199931671.png) 我们注意到,报错说的是找不到`config.m4` 但当前目录下确实存在一个`.m4`文件,那么我们复制一下这个文件 ```shell cp config0.m4 config.m4 ``` 这样我们就有了这个`config.m4`文件了,再次执行`phpize`命令 ![创建预编译脚本成功](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/71184198.png) 可以看到已经成功创建,输出了当前版本号和扩展编号信息。 那么这个目录下是否已经出现了`./configure`文件呢? ![出现configure文件](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/2198242631.png) 可以看到已经有了,这时候我们就可以按照之前的步骤进行预编译了。 #### 3. 开始预编译 开始预编译了,使用命令: ```shell ./configure --with-php-config=/server/php/8.3.0/bin/php-config ``` 这里需要将当前`php-config`文件的路径传进去,需要让这个扩展知道需要安装给哪个`PHP`来使用。 等待一会,显示成功。 ![预编译结束](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/335103899.png) #### 4. 开始编译及安装 依次输入下面的几条命令即可进行编译和安装,注意,测试步骤可以省略 ,本人亲测,测试过程出错了也不影响目前使用。 ```shell # 编译 make # 测试 make test # 安装 make install ``` ![编译成功](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/3533913820.png) ![安装成功](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/2724444132.png) 此时安装成功后,有一条提示,这个路径就是这个扩展实际安装的位置,可以看到,这个位置是处于我们`php`的安装目录`lib/`下的。 #### 5. 仍没有显示扩展 这时候我们测试一下是否已经有`OpenSSL`扩展了,使用命令: ```shell php -m ``` 发现当前仍然没有`OpenSSL`扩展,这是怎么回事呢? ![扩展列表里没有OpenSSL](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/1162239704.png) #### 6. 在配置文件当中开启扩展 这种情况属于扩展已经安装好了,但`php`的配置当中并没有开启这个扩展,造成这个扩展属于未激活的状态。 我们找到`php`的配置文件,如果不清楚怎么找的,可以使用`php --ini`命令查看当前`php`脚本的配置文件在哪个路径。 ```shell vim /server/php/8.3.0/etc/php.ini ``` 打开这个文件之后,使用斜杠,输入`openssl`,查找到这一行,将前面的分号给去掉,然后保存退出。 ![解除扩展的注释](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/1350090596.png) 然后我们再次输入检查扩展列表的命令。 ![已经加载openssl扩展](https://aliyun-yuesha-public-oss.oss-cn-zhangjiakou.aliyuncs.com/usr/uploads/2023/12/2625883199.png) 发现已经加载了`OpenSSL`扩展了,至此,安装完成。 **如果你的项目是运行在`php-fpm`下进行解析的,记得再重启一下`php-fpm`哦,不是重启`Apache`或者`Nginx`** 瑞思拜~ 下班 欢迎关注拓行公众号,分享各种技术博客文章拓行——奋勇进取,开拓未来,砥砺前行 最后修改:2023 年 12 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~