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

当系统中安装了多个php版本时,如何使用pecl为特定的php版本安装php扩展?,php,ubuntu,php-7,php-extension,pecl,Php,Ubuntu,Php 7,Php Extension,Pecl,根据本手册,我已经从Ubuntu上的PPA安装了php5.6和php7.0 但是我不知道如何使用php5.6或php7.0的pecl安装扩展 例如,我已经在php5.6中安装了libevent或amqp版本 现在,当我键入pecl install libevent并且我的活动php版本是php7.0(使用updatealternations--set php/usr/bin/php7.0)时,pecl返回消息说libevent`已经安装 但是它只为php5.6安装(当这个版本处于活动状态时),

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

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

例如,我已经在php5.6中安装了
libevent
amqp
版本

现在,当我键入
pecl install libevent
并且我的活动php版本是php7.0(使用
updatealternations--set php/usr/bin/php7.0)时,
pecl
返回消息说
libevent`已经安装

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

哪些命令可以帮助我

UPD

我找到了将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
但是他们没有帮助,pecl仍然给我列出了php5.6已经安装的扩展,即使我切换到了php7

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,它应该是空的

如何解决这个问题

UPD

对于amqp,我刚刚安装了php amqp包,没有使用pecl

apt-get install php-amqp
php7的libevent仍然不存在。
但我还没有找到在5.6和7版本之间切换pecl安装的方法,所以问题仍然悬而未决。

我在更新时遇到了同样的问题,因为XGUI需要mongodb。我希望能够在PHP5.6和7.0上支持评测

我深入研究了pecl源代码,发现有一个
metadata\u dir
config选项。这是指向目录的路径,其中包含已安装软件包的当前状态。不幸的是,每个PHP版本都没有名称空间。如果您尝试使用
pecl config set
对其进行设置,则会出现不透明的“失败”错误。事实证明,在
\PEAR\u Config
类中,设置没有被列为可配置的白名单:

/**
 * Configuration values that can be set for a channel
 *
 * All other configuration values can only have a global value
 * @var array
 * @access private
 */
var $_channelConfigInfo = array(
    'php_dir', 'ext_dir', 'doc_dir', 'bin_dir', 'data_dir', 'cfg_dir',
    'test_dir', 'www_dir', 'php_bin', 'php_prefix', 'php_suffix', 'username',
    'password', 'verbose', 'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
    );
在PECL的世界里,“全局”意味着它只能在安装时设置,而不能在安装后设置

github的PPA跟踪器中有一个问题:

最后一个建议是为其他PHP版本手动构建扩展。我最终使用pecl进行PHP7扩展,并手动构建5.6。在构建之前,确保为php config和phpize运行
updatealternations
,而不仅仅是php:

update-alternatives --set php /usr/bin/php5.6
update-alternatives --set php-config /usr/bin/php-config5.6
update-alternatives --set phpize /usr/bin/phpize5.6
然后,提取扩展并构建它。上述问题中的这些步骤对我使用mongodb扩展非常有效:


phpize5.6&&./configure--with php config=php-config5.6&&make&&sudo make安装

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

从pecl安装之前,请切换到所需的php、php配置、phpize版本

只需使用force标志运行安装

sudo pecl install -f <package-name>
sudo pecl安装-f

以下是在编写脚本时对我最有效的方法(以防其他人像我一样遇到这种情况):


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

首先,在Linux环境中获得管理员权限- **Sudo su** 然后遵循下面的语法 sudo apt get安装php7.3-bcmath

这里是php7.3(输入您的php版本并通过php-v进行检查) bcmath(输入扩展名)


如果您想查看活动扩展列表,请在终端中输入(php-m)。

为什么有两个版本的php?我需要这两个版本以满足我的特定需求。例如,我有两个项目,一个应该用5.6运行,另一个应该用7运行。我没有时间把第一个迁移到php7。你找到解决办法了吗?鸡脚,我想这里的第一个答案是go@OlegAbrazhaev马特的答案应该被接受。这是我认为最好的答案。但是,它似乎删除了以前的扩展对象,这很烦人。但是,可以做的是指示PECL“注销”扩展,以便可以在不删除现有扩展的情况下重新安装。请参阅下面的@Matt Zuba答案。谢谢!这对于Debian 10非常有用,在Debian 10中,大多数PHP扩展都不适用于使用deb.sury.org pacakges的任何<7.3版本。当升级运行PHP5.6的旧的EOL Debian 8服务器时,这种情况就不太好了。使用此方法,我可以为5.6、7.0、7.1或7.2构建扩展++这对我有帮助
pecl安装
继续安装
mcrypt
用于非预期的PHP版本。非常感谢!!!这对于我正在使用Ansible进行的配置非常有用,当pecl通过Laravel Forge控制面板降级php版本后出现问题时,我需要使用7.2版本的Works wonders。嘿,我不太擅长在核心Linux文件系统中乱搞,如果在将来的某个时候,我真的想删除和清除我正在使用的版本的php xdebug ext,该怎么办?
$ 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>
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
  ...