我已根据本手册在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
并且我的活动php版本是php7.0(使用update-alternatives --set php /usr/bin/php7.0),
pecl returns message that
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
但是他们没有帮助,即使我切换到php7,pecl仍然给我list
已经安装的php5.6扩展名。
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安装,所以问题仍然存在。
答案 0 :(得分:14)
在尝试编写脚本时,这对我来说最有效(如果有其他人像我一样遇到过这种情况):
$ 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版本(例如:如果软件包仍然注册为已安装,则安装PHP 7.0的扩展将删除5.6版本)
答案 1 :(得分:6)
我在更新my Vagrant box with XHGui时遇到了同样的问题,因为XHGui需要mongodb。我希望能够支持PHP 5.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的世界中,'全球'意味着它只能在安装时设置,而不能在安装时设置。
PPA跟踪器在github上有一个问题:https://github.com/oerdnj/deb.sury.org/issues/407
最后的建议是为备用PHP版本手动构建扩展。我最终使用pecl进行PHP 7扩展,并使用5.6进行手动构建。确保为php-config和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
答案 2 :(得分:6)
当pecl抛出错误已经安装并且与发布的版本相同
从pecl
安装之前切换到所需的php,php-config,phpize版本只需使用强制标志
运行安装sudo pecl install -f <package-name>
答案 3 :(得分:0)
首先,在Linux环境中获得管理员权限- **苏多苏** <> 然后遵循以下语法 sudo apt-get install php7.3-bcmath
此处php7.3(输入您的php版本并通过php -v检查) bcmath(输入您的扩展名)
如果要查看活动扩展的列表,请在终端中输入(php -m)。