Utiliser une version différente de PHP CLI exécutable pour une commande
donc j'ai Gentoo box 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 cadre à l'aide du compositeur:
$ composer create-project laravel/laravel --prefer-dist
cela cependant jette une erreur parce que Laravel nécessite PHP > 5.5.9 et la valeur par défaut php
interprète 5.4 .
Alors je donne un autre ordre:
$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist
cela m'amène un peu plus loin, mais ensuite quelques commandes post-installation de composer.json
de Laravel entrent en jeu, et l'installation s'arrête.
ceci 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 voir, l'interpréteur "default" est encore utilisé!
maintenant, les fichiers PHP propres commencent par le shebang suivant:
#!/usr/bin/env php
c'est une belle fonctionnalité car l'interpréteur PHP peut être trouvé sous différents emplacements sur différents systèmes.
Malheureusement, dans ce cas, la commande env
renvoie le chemin au premier exécutable trouvé dans la variable d'environnement $PATH
.
Comment pourrais-je modifier l'environnement de la session actuelle ou quel genre de truc exécuter donc, pour l'exécution de L'ensemble du processus D'installation Laravel, la commande php
invoquerait /usr/bin/php5.6
au lieu de /usr/bin/php
?
Je ne veux pas changer $PATH
variable ou modifier des fichiers comme composer
, composer.json
ou l'utilitaire CLI de Laravel artisan
.
Modifier: aussi supposer que je veux le faire à partir du compte d'Utilisateur régulier (c.-à-d. sans permissions root).
5 réponses
peut-être Pouvez-vous 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 voulez pas modifier le chemin pour votre session shell, vous pouvez définir la portée du changement pour la commande courante seulement:
$ 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) ...
exécutable PHP par défaut peut être trouvé en utilisant:
$ which php
dans la plupart des cas, il est lien vers la version PHP particulière:
lrwxrwxrwx 1 root root 21 aug 15 2016 /usr/bin/php -> /usr/bin/php7.1
pour le changer en une version différente, reliez-le à une autre
$ sudo rm /usr/bin/php
$ sudo ln -s /usr/bin/php5.6 /usr/bin/php
avant relink vous devez vous assurer que la version PHP cible est installée.
identifiez où est la Commande Générique actuelle php
et à quel binaire elle pointe avec which php
.
il vous donnera un chemin vers un lien symbolique comme vous le mentionnez dans votre question
/usr/bin/php -> /usr/lib64/php5.4/bin/php
éditez le lien symbolique pour indiquer la version php que vous voulez pour l'instant, voir ici https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
Lorsque vous avez terminé juste inverser le processus.
mise à jour:
vous pouvez également ajouter un alias
pour l'utilisateur actuel en édition ~/.bashrc
et par adjonction,
alias php='/usr/bin/php5.6'
voir si cela fonctionne
depuis que PHP7 est venu autour de Debian Linux crée différents exécutables pour les versions 5 et 7 de PHP dans /usr/bin par défaut (si vous installez les deux versions c'est-à-dire).
appeler ces différentes versions 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
c'est évidemment seulement bon pour les scripts simples. Pour tout ce qui est plus grand (compositeur, artisan, etc.), vous devez modifier la variable PATH.
pour modifier le version votre serveur Apache utilise tout ce que vous avez à faire est:
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 vice versa si vous voulez utiliser la version PHP inférieure.
le mentionnant au cas où Quelqu'un aurait des problèmes similaires sur Debian.
pour tous ceux qui n'ont pas trouvé de solution dans ce qui précède, parce qu'ils utilisent composer update
et d'une façon ou d'une autre la mauvaise version de PHP est utilisée. En utilisant composer self-update
j'ai eu plus d'info et finalement j'ai découvert que dans le composer.json
vous pouvez spécifier un platform
dans la section config
, qui remplace ce que la version php est utilisée par composer. Le simple fait de changer cette valeur ou de supprimer cette configuration a résolu mon problème.
compositeur.json
"config": {
"platform": {
"php": "7.1"
},