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.
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.
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
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.
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
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
Il existe un moyen de basculer PHP-Version sur Ubuntu:
Sudo update-alternatives --set php /usr/bin/php5.6