引言
我在安装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
瑞思拜~
下班