当系统中安装了多个php版本时,如何使用pecl为特定的php版本安装php扩展?

2022-08-30 10:23:13

我已经根据本手册从PPA在Ubuntu上安装了php5.6和php7.0

http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

但是我不知道如何使用php5.6或php7.0安装扩展。pecl

例如,我已经在php5.6中安装了或的版本。libeventamqp

现在,当我键入并且我的活动php版本是php7.0(使用已安装的pecllibevent'。pecl install libeventupdate-alternatives --set php /usr/bin/php7.0),returns message that

但是它只为php5.6安装(当这个版本处于活动状态时),现在我想为php7.0安装它。

哪些命令可以帮助我?

断续器

我已经找到了这个命令,用于将pecl切换到php7.0,并将它们打包到可执行的bash脚本:

#!/bin/bash

sudo update-alternatives --set php /usr/bin/php7.0

sudo pecl config-set php_ini /etc/php/7.0/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20151012/
sudo pecl config-set bin_dir /usr/bin/
sudo pecl config-set php_bin /usr/bin/php7.0
sudo pecl config-set php_suffix 7.0

和 php5.6

#!/bin/bash

sudo update-alternatives --set php /usr/bin/php5.6

sudo pecl config-set php_ini /etc/php/5.6/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20131226/
sudo pecl config-set bin_dir /usr/bin/
sudo pecl config-set php_bin /usr/bin/php5.6
sudo pecl config-set php_suffix 5.6

但是它们没有帮助,即使我切换到php7,pecl仍然给了我已经安装的php5.6扩展。list

pecl list
Installed packages, channel pecl.php.net:
=========================================
Package  Version State
amqp     1.7.1   stable
libevent 0.1.0   beta
stats    1.0.3   stable

对于 php7.0,它应该是空的!

如何解决问题?

断续器

对于amqp,我刚刚安装了php-amqp软件包,而没有使用pecl。

apt-get install php-amqp

对于 php7 来说,libevent 仍然不存在。但是我还没有找到在5.6和7版本之间切换pecl安装的方法,所以问题仍然悬而未决。


答案 1

以下是在尝试编写此脚本时最适合我的方法(以防其他人像我一样遇到这种情况):

$ pecl -d php_suffix=5.6 install <package>
$ pecl uninstall -r <package>

$ pecl -d php_suffix=7.0 install <package>
$ pecl uninstall -r <package>

$ pecl -d php_suffix=7.1 install <package>
$ pecl uninstall -r <package>

该部分允许您在运行时设置配置值,而不是使用 预先设置它们。该位实际上并没有卸载它(从文档中):-d php_suffix=<version>pecl config-setuninstall -r

vagrant@homestead:~$ pecl help uninstall
pecl uninstall [options] [channel/]<package> ...
Uninstalls one or more PEAR packages.  More than one package may be
specified at once.  Prefix with channel name to uninstall from a
channel not in your default channel (pecl.php.net)

Options:
  ...
  -r, --register-only
        do not remove files, only register the packages as not installed
  ...

卸载行是必要的,否则安装它将删除任何以前安装的版本,即使它是针对不同的PHP版本(例如:如果软件包仍注册为已安装,则安装PHP 7.0的扩展将删除5.6版本)。


答案 2

当 pecl 抛出错误已安装并且与已发布版本相同时

在从 pecl 安装之前切换到所需的 php、php-config、phpize 版本

只需使用强制标志运行它安装

sudo pecl install -f <package-name>

推荐