J'ai donc une boîte Gentoo avec trois versions PHP installées (peu importe les raisons):
/usr/bin/php
-> /usr/lib64/php5.4/bin/php
/usr/bin/php5.5
-> /usr/lib64/php5.5/bin/php
/usr/bin/php5.6
-> /usr/lib64/php5.4/bin/php
Je veux installer Laravel framework using composer:
$ composer create-project laravel/laravel --prefer-dist
Cependant, cela génère une erreur car Laravel nécessite PHP> 5.5.9 et que l'interpréteur php
par défaut est 5.4 . J'émets donc une autre commande:
$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist
Cela me fait avancer un peu plus loin, mais certaines commandes de post-installation du composer.json
de Laravel entrent en jeu et l'installation se bloque.
Cela est dû au fait que les commandes composer.json
ressemblent à ceci:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
Comme vous pouvez le constater, l'interpréteur "par défaut" est à nouveau utilisé!
Maintenant, les fichiers PHP appropriés commencent par Shebang:
#!/usr/bin/env php
C'est une fonctionnalité intéressante, car l'interprète PHP peut être trouvé à différents emplacements sur différents systèmes . Malheureusement, dans ce cas, la commande env
renvoie le chemin du premier exécutable trouvé dans la variable d'environnement $PATH
.
Comment puis-je éventuellement modifier l’environnement de la session en cours ou quel type d’astuce à exécuter pour que la commande php
du processus d’installation de Laravel entier appelle la méthode /usr/bin/php5.6
au lieu de /usr/bin/php
?
Je ne veux pas changer la variable $PATH
ni modifier des fichiers tels que composer
, composer.json
ou l'utilitaire CLI de Laravel artisan
.
Éditer: supposons également que je veuille faire cela à partir d’un compte utilisateur normal (c’est-à-dire sans autorisations root).
Peut-être que vous pouvez essayer de réparer l'environnement!
$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...
Ou, si vous ne souhaitez pas modifier le PATH pour votre session Shell, vous pouvez limiter la modification à la commande en cours uniquement:
$ php -v
PHP 5.4.x (cli) ...
$ env PATH="/usr/lib64/php5.6/bin:$PATH" php -v
PHP 5.6.x (cli) ...
$ php -v
PHP 5.4.x (cli) ...
L'exécutable par défaut PHP peut être trouvé en utilisant:
$ which php
Dans la plupart des cas, il s'agit d'un lien vers une version particulière de PHP:
lrwxrwxrwx 1 root root 21 aug 15 2016 /usr/bin/php -> /usr/bin/php7.1
Pour changer de version, reliez-le simplement à un autre
$ Sudo rm /usr/bin/php
$ Sudo ln -s /usr/bin/php5.6 /usr/bin/php
Avant de relier, vous devez vous assurer que la version cible PHP est installée.
Identifiez où se trouve la commande générique actuelle php
et vers quel binaire elle pointe avec which php
.
Cela vous donnera un chemin vers un lien symbolique comme vous l'avez mentionné dans votre question.
/usr/bin/php -> /usr/lib64/php5.4/bin/php
Modifiez le lien symbolique pour indiquer la version de PHP que vous souhaitez pour l'instant, voir ici https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
Lorsque vous avez terminé, il suffit d'inverser le processus.
UPDATE: Vous pouvez également ajouter une alias
pour l’utilisateur actuel en modifiant ~/.bashrc
et en ajoutant ce qui suit:
alias php='/usr/bin/php5.6'
voir si ça marche
Depuis que PHP7 est arrivé, Debian Linux crée par défaut différents exécutables pour PHP versions 5 et 7 dans/usr/bin (si vous installez les deux versions).
L'appel de ces différentes versions à partir de la ligne de commande est aussi simple que jamais:
kkarski@debian:~ $ php5 -v
PHP 5.6.26-0+deb8u1 (cli) (built: Sep 21 2016 12:37:50)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
kkarski@debian:~ $ php -v
PHP 7.0.9-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.9-1~dotdeb+8.1, Copyright (c) 1999-2016, by Zend Technologies
Ce n'est évidemment bon que pour les scripts simples. Pour tout ce qui est plus grand (compositeur, artisan, etc.), vous devrez changer la variable PATH.
Pour changer la version utilisée par votre serveur Apache, il vous suffit de:
root@debian:~# a2dismod php5 && a2enmod php7.0
Module php5 disabled.
To activate the new configuration, you need to run:
service Apache2 restart
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
service Apache2 restart
et inversement si vous souhaitez utiliser la version inférieure PHP.
Le mentionner au cas où quelqu'un aurait des problèmes similaires sur Debian.
Pour tous ceux qui n'ont trouvé aucune solution dans ce qui précède, car ils utilisent composer update
et, d'une manière ou d'une autre, la mauvaise version PHP est utilisée. En utilisant composer self-update
, j'ai obtenu quelques informations supplémentaires et j'ai finalement découvert que, dans le composer.json
, vous pouvez spécifier un platform
dans la section config
, qui remplace la version php utilisée par composer. Changer simplement cette valeur ou supprimer cette configuration a résolu mon problème.
composer.json
"config": {
"platform": {
"php": "7.1"
},
Il est possible d'utiliser alias
, mais gardez à l'esprit que les alias ne sont pas développés par défaut.
Vous devez également activer l'extension de ceux-ci.
shopt -s expand_aliases
alias php="/usr/local/bin/php-5.6"
./some-script.sh
unalias php # back to previous version
Je trouve le plus facile de réaliser la même chose que de créer un lien symbolique comme par exemple
ln -s /opt/php-7.0.32/bin/php /usr/bin/php7
ln -s /opt/php-7.1/bin/php /usr/bin/php71
ln -s /opt/php-5.6/bin/php /usr/bin/php56
alors que vous utilisez votre version par défaut, dites que c'est php7.2 et que php pour version alternative, vous pouvez utiliser php7
ou php71
ou php56
ici ln -s /opt/php-7.1/bin/php /usr/bin/php71
est le fichier source/original et /usr/bin/php7
est la destination/lien