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):

  1. /usr/bin/php -> /usr/lib64/php5.4/bin/php
  2. /usr/bin/php5.5 -> /usr/lib64/php5.5/bin/php
  3. /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).

26
demandé sur roomcays 2015-07-03 15:27:07

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) ...
32
répondu Guillaume Crico 2015-08-05 17:27:24

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.

12
répondu Saleniex 2017-04-24 10:52:51

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

8
répondu Alex Andrei 2017-04-13 12:36:28

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.

6
répondu Krzysztof Karski 2016-10-17 12:24:09

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" },

0
répondu Rein Baarsma 2018-06-11 08:53:02