根据本手册,我已经在Ubuntu上安装了PPA的php5.6和php7.0
http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
但我不知道如何使用pecl为php5.6或php7.0安装扩展。
例如,我已经在php5.6中安装了libevent或amqp版本。
现在,当我输入pecl install libevent并且我的active php版本是php7.0时(使用update-alternatives --set php /usr/bin/php7.0),peclreturns message thatlibevent`‘已经安装好了。
但是它只安装在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的list,即使我切换到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安装的方法,所以问题仍然没有解决。
发布于 2018-01-20 04:08:00
在尝试编写脚本时,以下是对我最有效的方法(以防其他人像我一样遇到这种情况):
$ 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-set预先设置配置值。uninstall -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版本(例如:安装PHP7.0的扩展将删除5.6版本,如果包仍然注册为已安装)。
发布于 2017-08-15 12:32:08
当pecl抛出错误已经安装并且与发布的版本相同时
在从pecl安装之前切换到必需的php、php-config、phpize版本。
只需使用强制标志运行它的安装。
sudo pecl install -f <package-name>发布于 2017-05-08 20:02:59
我在更新带XHGui的Vagrant时遇到了同样的问题,因为XHGui需要mongodb。我希望能够支持PHP5.6和7.0的分析。
我深入研究了pecl源代码,发现有一个metadata_dir配置选项。这是指向已安装包当前状态的目录的路径。不幸的是,每个PHP版本还没有命名空间。如果尝试用pecl config-set设置它,就会得到一个不透明的“失败”错误。结果表明,在\PEAR_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跟踪器中有一个问题:https://github.com/oerdnj/deb.sury.org/issues/407
最后一个建议是手动构建可选PHP版本的扩展。最后,我为PHP 7扩展使用了pecl,为5.6使用了手动构建。在构建之前,一定要运行php和phpize的update-alternatives,而不仅仅是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 install
https://stackoverflow.com/questions/40419718
复制相似问题