Ubuntu pecl 多版本 PHP 安装扩展,避免冲突

不知道有人没有遇到过,pecl 在给多版本 PHP 安装同一个扩展的时候会提示重复安装。如下记录解决方法。

1. 安装扩展#

sudo pecl -d php_suffix=8.0 install <package>

我理解 -d php_suffix= 是指定 php 命令的后缀,例如 -d php_suffix=8.0 则为 php8.0

2. 卸载扩展#

sudo pecl uninstall -r <package>

加上 -r 不会删除已安装的好扩展 .so 文件

重复以上步骤,再次安装其他 PHP 版本相同扩展就可以正常安装成功了!

3. 一键启用扩展#

在目录下 /etc/php/x.x/mods-availablex.x 为 php 版本号目录) 创建 ini 文件,例如 yaf.ini 并编辑内容如下

extension=yaf.so

通过执行命令来一键启用 cli 和 fpm 版本扩展

sudo phpenmod -v <php-version> <extension-name>

其中 <php-version> 为 php 版本(单版本可以忽略 -v 参数),<extension-name> 为扩展名

例如,要启用 php8.0 的 yaf 扩展:

sudo phpenmod -v 8.0 yaf

4. 一键禁用扩展#

通过执行命令来一键启用 cli 和 fpm 版本扩展

sudo phpdismod -v <php-version> <extension-name>

其中 <php-version> 为 php 版本(单版本可以忽略 -v 参数),<extension-name> 为扩展名

例如,要禁用 php8.0 的 yaf 扩展:

sudo phpdismod -v 8.0 yaf

8.0

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 5

用 ondrej 的三方源

ubuntu:

sudo apt-add-repository ppa:ondrej/php

debian:

apt-get update
apt-get -y install apt-transport-https lsb-release ca-certificates curl
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

apt-get update 之后

只需要 apt-get install php[7.2|8.0|7.4|8.1]-[php|fpm] 就能安装指定版本的 php 和 fpm

apt-get install php[version]-ext_name 可以安装指定版本 php 的指定扩展(如果有支持的话)


CentOS/Fedora/AlmaLinux/RockyLinux/OracleLinux 等 RPMs 系的可以用 remi 的源。大同小异。

2年前 评论
王小大 (楼主) 2年前

注意目标版本 PHP 引用即可。

假设你要给 php8.1 安装扩展,其路径为 /usr/local/php/8.1, 将此目录注入当前 shell 的环境变量:

export PATH=/usr/local/php/8.1/bin:$PATH

# 安装扩展
pecl install [ext]

重点是让 pecl 找到正确的 php-config。

2年前 评论
王小大 (楼主) 2年前