2016-11-04 1 views
9

J'ai installé les deux php5.6 et php7.0 de PPA sur Ubuntu selon ce manuelComment installer l'extension PHP en utilisant PECL pour la version php spécifique, lorsque plusieurs versions de php installé dans le système?

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

Mais je n'ai pas comment installer des extensions en utilisant pecl pour php5.6 ou php7.0 . Par exemple j'ai déjà installé la version de libevent ou amqp en php5.6.

Maintenant, quand je tape pecl install libevent et ma version active php est php7.0 (en utilisant update-alternatives --set php /usr/bin/php7.0), PECL returns message that libevent` déjà installé.

Mais il a été installé que pour php5.6 (lorsque cette version était actif) et maintenant Je veux le faire pour php7.0.

Quelles commandes pourrait me aider?

UPD

Je fo und cette commande pour le commutateur PECL à php7.0 et les paquets pour les scripts bash exécutables:

#!/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 

et 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 

Mais ils ne sont pas aider, PECL me donne encore list de déjà extensions installées à php5.6, même si je suis passé à 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 

Il devrait être vide pour php7.0!

Comment résoudre le problème?

UPD

Pour AMQP Je viens d'installer package php-AMQP sans utiliser PECL.

apt-get install php-amqp 

Et libevent n'existe toujours pas pour php7. Mais je ne l'avais pas trouvé un moyen de changer l'installation de PECL entre 5,6 et 7 versions, donc la question est toujours ouverte.

+0

Pourquoi avez-vous deux versions de php? – Archish

+1

J'ai besoin des deux pour mes besoins spécifiques. Par exemple, j'ai 2 projets, l'un devrait fonctionner avec 5.6, le second avec 7. Et je n'ai pas le temps de migrer le premier vers php7. –

+0

Avez-vous trouvé une solution? – ChickenFeet

Répondre

3

je suis tombé sur ce même problème lors de la mise à jour my Vagrant box with XHGui, comme XHGui exige MongoDB. Je voulais être capable de supporter le profilage à la fois sur PHP 5.6 et 7.0.

Je creusèrent dans le code source de PECL, et a constaté qu'il ya une option de configuration metadata_dir. C'est un chemin vers un répertoire où l'état actuel des paquets installés. Malheureusement, ce n'est pas déjà fait par nom de fichier par version PHP. Si vous essayez de définir avec pecl config-set, vous obtenez un opaque « a échoué » erreur. Il se avère que paramètre n'est pas comme configuable liste blanche dans la classe \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' 
    ); 

Dans le monde de PECL, « global » signifie qu'il ne peut être réglé lors de l'installation, et non après.

Il y a un problème dans le système de suivi PPA sur github à: https://github.com/oerdnj/deb.sury.org/issues/407

La dernière suggestion, il est de construire l'extension manuellement pour les versions de PHP alternatives. J'ai fini par utiliser pecl pour les extensions PHP 7, et les builds manuels pour 5.6. Assurez-vous que vous exécutez update-alternatives pour php-config et phpize, et pas seulement php avant la construction:

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 

Extrayez l'extension et la construire. Ces étapes de la question ci-dessus a fonctionné pour moi avec l'extension MongoDB:

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

2

Lorsque PECL lancers francs erreur est déjà installé et est la même que la version publiée

Version php nécessaire, php-config , les versions phpize avant d'installer PECL

il suffit de lancer l'installation avec une force qu'il drapeau

sudo pecl install -f <package-name> 
+1

C'est la meilleure réponse à mon avis. Il semble toutefois supprimer l'objet d'extension précédent, ce qui est gênant. – msbit

1

Voici ce qui fonctionne le mieux pour moi en essayant de ce script (au cas où quelqu'un d'autre vient à travers cela comme je l'ai fait):

$ 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> 

La pièce -d php_suffix=<version> vous permet de définir les valeurs de configuration lors de l'exécution contre les prérégler avec pecl config-set . Le uninstall -r bit ne désinstallez pas réellement (à partir de la documentation):

[email protected]:~$ 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 
    ... 

La ligne de désinstallation est nécessaire, sinon installer il supprimera toute version précédemment installée, même si elle était une version de PHP différente (ex: l'installation d'un l'extension pour PHP 7.0 supprimerait la version 5.6 si le paquet était encore enregistré comme installé).