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的源。大同小异。

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

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

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

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

# 安装扩展
pecl install [ext]

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

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!