写在前面
我在安装composer的时候,出现了一个报错。

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脚本,重新编译太麻烦了,花的时间也太久了。
好在我们的源码包还没有删掉,可以直接安装扩展。
传送门
# 进入指定扩展目录
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基础扩展的目录了。

二、进行扩展包的编译
然后,需要先进入此目录
比如:我现在缺少的是OpenSSL扩展,那就需要进入源码包/ext/openssl
如果你缺少的是其他的扩展,就需要进入其他的目录,结构类似。

1. 尝试创建预编译脚本
从上图看到,这个包下面,是没有configure文件的。
这个就没有办法直接上来就进行预编译,只能先通过php提供的phpize的脚本,来创建出一个预编译的脚本文件。
我们尝试用phpize命令进行创建
2. 出现找不到文件的问题

我们注意到,报错说的是找不到config.m4
但当前目录下确实存在一个.m4文件,那么我们复制一下这个文件
cp config0.m4 config.m4
这样我们就有了这个config.m4文件了,再次执行phpize命令

可以看到已经成功创建,输出了当前版本号和扩展编号信息。
那么这个目录下是否已经出现了./configure文件呢?

可以看到已经有了,这时候我们就可以按照之前的步骤进行预编译了。
3. 开始预编译
开始预编译了,使用命令:
./configure --with-php-config=/server/php/8.3.0/bin/php-config
这里需要将当前php-config文件的路径传进去,需要让这个扩展知道需要安装给哪个PHP来使用。
等待一会,显示成功。

4. 开始编译及安装
依次输入下面的几条命令即可进行编译和安装,注意,测试步骤可以省略 ,本人亲测,测试过程出错了也不影响目前使用。
# 编译
make
# 测试
make test
# 安装
make install


此时安装成功后,有一条提示,这个路径就是这个扩展实际安装的位置,可以看到,这个位置是处于我们php的安装目录lib/下的。
5. 仍没有显示扩展
这时候我们测试一下是否已经有OpenSSL扩展了,使用命令:
php -m
发现当前仍然没有OpenSSL扩展,这是怎么回事呢?

6. 在配置文件当中开启扩展
这种情况属于扩展已经安装好了,但php的配置当中并没有开启这个扩展,造成这个扩展属于未激活的状态。
我们找到php的配置文件,如果不清楚怎么找的,可以使用php --ini命令查看当前php脚本的配置文件在哪个路径。
vim /server/php/8.3.0/etc/php.ini
打开这个文件之后,使用斜杠,输入openssl,查找到这一行,将前面的分号给去掉,然后保存退出。

然后我们再次输入检查扩展列表的命令。

发现已经加载了OpenSSL扩展了,至此,安装完成。
如果你的项目是运行在php-fpm下进行解析的,记得再重启一下php-fpm哦,不是重启Apache或者Nginx
瑞思拜~
下班