# 创建目录 /resource/php `mkdir -p /resource/php`
# 用 php-8.0.23 和 php-8.1.10 演示
cd /resource/php
wget https://www.php.net/distributions/php-8.1.10.tar.gz
wget https://www.php.net/distributions/php-8.0.23.tar.gz
# `tar -zxvf php-8.1.10.tar.gz`
# `cd php-8.1.10`
安装依赖包
yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2 libxml2-devel libjpeg-devel freetype-devel libpng-devel
gd-devel curl-devel openssl-devel libxslt-devel -y
配置编译参数
./configure --prefix=/usr/local/php81 --with-config-file-path=/usr/local/php81/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-openssl --with-zlib --enable-mbstring --disable-mbregex --enable-mysqlnd---with-mysql --with-mysqli --with-pdo-mysql --enable-gd --with-zlib-dir --enable-sockets --with-curl
ps:出现 No package “***” found错误 直接百度搜索 yum install -y 安装对应包后,重新上一步骤
php7参数
./configure --prefix=/usr/local/php73 --with-config-file-path=/usr/local/php73/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-openssl --with-zlib --enable-mbstring --disable-mbregex --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-gd --with-zlib-dir --enable-sockets --with-curl
执行编译
make && make install
# 上面编译中的 --prefix=/usr/local/php81 指定的
# /usr/local/php81/bin/php -v
ps: 其余版本php 重复上面步骤即可
两种情况:
#第一种:本文示例 8.1版本已经有源码包 因此不需下载,用其来演示
cd /resource/php/php-8.1.10/ext/
# 在 ext/ 目录下可以看到 php 所有的原生扩展,以 zip为例
cd zip
# 执行 phpize
/usr/local/php81/bin/phpize
# 配置编译
./configure --with-php-config=/usr/local/php81/bin/php-config
# 编译并且安装
make && make install
# 查看扩展是否安装成功
/usr/local/php81/bin/php -m
# 在 /usr/local/php81/etc/php.ini 中加入 `extension = zip`
第二种:比如安装 sodium 扩展,但是 安装libsodium是安装sodium扩展的必须依赖条件
libsodium 是第三方扩展 ,需自行去下载安装
# wget https://github.com/jedisct1/libsodium/releases/download/1.0.18-RELEASE/libsodium-1.0.18.tar.gz
# tar xf libsodium-1.0.18.tar.gz && cd libsodium-1.0.18
# ./configure && make -j2 && make install
# echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
# ldconfig
注意这时候我遇到坑了,试了很多次,我也记不得哪个是了,此时可看到:


执行命令:
echo $PKG_CONFIG_PATH
# 如果为空的话 执行下面命令
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
# 或者 根据自己实际情况来确定,我这演示服务器都可以
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
接下俩就可以正常按照第一种情况安装sodium 扩展了
安装完成后,配置开启
执行完成后会显示扩展模块编译到的目录/usr/local/php81/lib/php/extensions/no-debug-non-zts-20210902/
这个目前 安装完后文件名自行查看
修改php.ini添加扩展
extension_dir = “/usr/local/php81/lib/php/extensions/no-debug-non-zts-20210902/”
extension=sodium.so
extension=zip.so

保存退出,重启php
通过phpinfo可看到,扩展已生效
# 编辑 php-fpm 配置文件,如找不到可使用 `find / -name php-fpm.conf` 命令
vim /usr/local/php81/etc/php-fpm.conf # 去掉 `; pid = run/php-fpm.pid` 前面的分号注释,打开 pid 配置
vim /usr/local/php80/etc/php-fpm.conf # 去掉 `; pid = run/php-fpm.pid` 前面的分号注释,打开 pid 配置
vim /usr/local/php81/etc/php-fpm.d/www.conf # 输入 /9000 回车,找到 listen = 127.0.0.1:9000 这一行将 9000 修改为 9081
vim /usr/local/php80/etc/php-fpm.d/www.conf # 输入 /9000 回车,找到 listen = 127.0.0.1:9000 这一行将 9000 修改为 9080
# 关闭并重启 php-fpm
killall php-fpm
/usr/local/php81/sbin/php-fpm
/usr/local/php80/sbin/php-fpm
# 打开了 pid 配置后,可使用过以下命令关闭或重启 php-fpm
# INT, TERM 立刻终止
# QUIT 平滑终止
# USR1 重新打开日志文件
# USR2 平滑重载所有worker进程并重新载入配置和二进制模块
# php-fpm 关闭:
kill -INT `cat /usr/local/php81/var/run/php-fpm.pid`
kill -INT `cat /usr/local/php80/var/run/php-fpm.pid`
# php-fpm 重启:
kill -USR2 `cat /usr/local/php81/var/run/php-fpm.pid`
kill -USR2 `cat /usr/local/php80/var/run/php-fpm.pid`
6、Nginx 配置多版本 PHP 解析
# php81 匹配路由根据自己需要自行配置
location /php81 {
root $root;
fastcgi_pass 127.0.0.1:9081; # 这里端口需和前面 php-fpm 修改的端口保持一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# php80
location /php80{
root $root;
fastcgi_pass 127.0.0.1:9080; # 这里端口需和前面 php-fpm 修改的端口保持一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 没有匹配到以上两种路由,默认走 php81
location ~ \.php$ {
root $root;
fastcgi_pass 127.0.0.1:9081;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重启nginx 生效 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
二.mysql