web-dev-qa-db-fra.com

pecl installe pour la version précédente de php

J'ai mis à niveau mon MacBook vers Mavericks et ruiné mon environnement de développement. Le problème que j'ai maintenant est que mon pear/pecl essaie toujours de l'installer pour ma version précédente (5.3) de PHP au lieu de la version 5.4.

Version PHP:

$ php -v
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Poire

$ pear version
PEAR Version: 1.9.4
PHP Version: 5.4.17
Zend Engine Version: 2.4.0
Running on: Darwin MBP-retina.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

Si j'installe apc avec

$ Sudo pecl install apc
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.....................................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
...
Build process completed successfully
Installing '/usr/local/Cellar/php53/5.3.26/include/php/ext/apc/apc_serializer.h'
Installing '/usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626/apc.so'
install ok: channel://pecl.php.net/APC-3.1.13
Extension apc enabled in php.ini

Et activer le module apc dans mon php.ini php -v passe à ceci:

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so, 9): image not found in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Donc, pecl installe mon extension apc dans /usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626 et php l'attend dans /usr/lib/php/extensions/no-debug-non-zts-20100525/.

Faire simplement un lien symbolique donne l'erreur suivante:

$ php -v
PHP Warning:  PHP Startup: apc: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
 in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Donc ce n'est pas une solution.

Quelqu'un peut-il me diriger dans la bonne direction? Je n'ai vraiment aucune idée de ce qui se passe ici.

19
Rene Terstegen

La solution était assez simple. Je devais apporter des modifications à ma configuration pecl. Il s'est avéré que ces deux commandes ont fait l'affaire:

Sudo pear config-set php_ini /etc/php.ini
Sudo pecl config-set bin_dir /usr/bin/

pecl a utilisé la mauvaise phpize. Il y avait deux versions de la phpize. La même chose compte pour mon fichier php.ini.

27
Rene Terstegen

Dans mon cas, j'essayais d'installer Gearman.

pecl install gearman ne l'installerait pas correctement.

php -i montrerait:

PHP Extension => 20100525

Pourtant, pecl installerait en utilisant:

PHP Api Version:         20090626

Après avoir modifié mes paramètres de configuration à utiliser:

Premier correctif

Sudo pecl config-set php_ini /etc/php.ini
Sudo pecl config-set php_bin /usr/bin/php5

J'ai remarqué que j'aurais encore 

ATTENTION: php_bin/usr/bin/php5 semble avoir un suffixe 5, mais config La variable php_suffix ne correspond pas

Vous pouvez résoudre ce problème en utilisant le paramètre de configuration:

Correctif supplémentaire

Sudo pear config-set php_suffix 5

Pourquoi était-ce un problème?

Pour moi, je suis dans ce problème parce que j'ai ajouté un PPA personnalisé et réinstallé PHP. Cela signifiait que mon installation précédente de php5-dev était désynchronisée. 

Si vous vous retrouvez dans la même situation, vous voudrez peut-être simplement courir….

apt-get remove php5-dev
pecl uninstall <extensionname>
apt-get install php5-dev
apt-get remove php5-pear
apt-get install php5-pear
pecl install <extensionname>

Alternativement, vous pouvez télécharger la source et lancer phpize. 

29
Layke

Mieux vaut réinstaller les extensions phpize car il sera utilisé par PECL et ne pas faire de piratage.

Faites ensuite (php 5.5 => php 5.6 exemple):

Sudo apt-get remove php5-dev
Sudo apt-get install php5.6-dev 

(vous pouvez changer la version 5.6 en la version dont vous avez besoin)

Ensuite:

Sudo pecl install extensionname
4
KorbenDallas

Aucune des autres réponses (à ce jour) ne semble traiter de la présence de plusieurs versions PHP "co-installables" tout en voulant créer une extension donnée pour toutes les versions PHP installées.

Pour illustrer le scénario dans lequel je me trouve (j'utilise les PPA Ondrej Surý PHP pour Ubuntu 16.04 LTS):

root@localhost:~# ls -lah /usr/bin/*php*
-rwxr-xr-x  1 root   root     11K Apr 19 12:50 dh_php
-rwxr-xr-x  1 root   root    3.1K Apr  5  2016 dh_phpcomposer
-rwxr-xr-x  1 root   root    5.4K Apr  5  2016 dh_phppear
lrwxrwxrwx  1 root   root      21 Jul 24 00:44 php -> /etc/alternatives/php
-rwxr-xr-x  1 root   root    4.3M Jul  6 10:04 php5.6
-rwxr-xr-x  1 root   root    4.3M Jul  6 10:04 php7.0
-rwxr-xr-x  1 root   root    4.4M Aug  4 14:22 php7.1
lrwxrwxrwx  1 root   root      28 Jul 24 00:44 php-config -> /etc/alternatives/php-config
-rwxr-xr-x  1 root   root    4.3K Jul  6 10:03 php-config5.6
-rwxr-xr-x  1 root   root    4.1K Jul  6 10:03 php-config7.0
-rwxr-xr-x  1 root   root    4.1K Aug  4 14:21 php-config7.1
lrwxrwxrwx  1 root   root      24 Jul 24 00:44 phpize -> /etc/alternatives/phpize
-rwxr-xr-x  1 root   root    4.7K Jul  6 10:03 phpize5.6
-rwxr-xr-x  1 root   root    4.6K Jul  6 10:03 phpize7.0
-rwxr-xr-x  1 root   root    4.6K Aug  4 14:21 phpize7.1

pecl install extension-name fait le travail pour PHP 7.1, mais pas pour les autres.

Les autres personnes interrogées indiquent qu’il est possible de désinstaller/réinstaller php*-dev, mais que je préfère de loin ne pas le faire, étant donné les versions intentionnelles co-installées PHP sur le système.

Une solution consiste à créer l'extension pour chaque version présente sur le système.

Ce fragment de code illustre la construction avec PHP 5.6, mais j'ai fait la même chose pour 7.0 et 7.1 et les étapes sont les mêmes.

Cet exemple illustre le clonage de l'extension à partir d'un référentiel Git, mais vous pouvez utiliser n'importe quel répertoire source.

(# indique que vous devez être root ou utiliser Sudo)

# apt-get install php-dev

# cd ~

# git clone https://github.com/vendor/extension-name

# cd ./extension-name

# phpize5.6

# ./configure --with-php-config=/usr/bin/php-config5.6

# make clean

# make

# make install

# ln -s /etc/php/5.6/mods-available/extension-name.ini /etc/php/5.6/fpm/conf.d/20-extension-name.ini

# service php5.6-fpm reload
4
Ben Johnson

Il existe un moyen de basculer PHP-Version sur Ubuntu:

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

Source: https://superuser.com/a/1100911/371795

0
Tobi G.