Use different PHP version CLI executable for one command
Solution 1
Maybe you can try to fix the environnement!
$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...
Or, if you don't want to modify the PATH for your shell session, you can scope the change for the current command only:
$ 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) ...
Solution 2
Default PHP executable can be found using:
$ which php
In most cases it is link to particular PHP version:
lrwxrwxrwx 1 root root 21 aug 15 2016 /usr/bin/php -> /usr/bin/php7.1
To change it to different version just relink it to another
$ sudo rm /usr/bin/php
$ sudo ln -s /usr/bin/php5.6 /usr/bin/php
Before relink you have to make sure target PHP version is installed.
Solution 3
Identify where the current generic php
command is and to which binary it points to with which php
.
It will give you a path to a symlink like you mention in your question
/usr/bin/php -> /usr/lib64/php5.4/bin/php
Edit the symlink to point to which ever php version you want for now, see here https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
When you are done just reverse the process.
UPDATE:
you can also add an alias
for the current user by editing ~/.bashrc
and adding the following
alias php='/usr/bin/php5.6'
see if this works out
Solution 4
Since PHP7 came around Debian Linux creates different executables for PHP versions 5 and 7 in /usr/bin by default (if you install both versions that is).
Calling those different versions from the command line is as simple as ever now:
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
This is obviously only good for simple scripts. For anything larger (composer, artisan etc.) you'll have to change the PATH variable.
To change the version your Apache server is using all you have to do is:
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
and vice versa if you want to use the lower PHP version.
Mentioning it in case someone has similar problems on Debian.
Solution 5
I find the easiest to achieve the same like just create a softlink like for example
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
then as you use your default version say it is php7.2 as just php for alternative version you can you php7
or php71
or php56
here ln -s /opt/php-7.1/bin/php /usr/bin/php71
is the source/orginal file and /usr/bin/php7
is the destination / link
roomcays
Updated on January 16, 2020Comments
-
roomcays over 4 years
So I have Gentoo box with three PHP versions installed (nevermind the reasons):
-
/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
I want to install Laravel framework using composer:
$ composer create-project laravel/laravel --prefer-dist
This however throws an error because Laravel requires PHP > 5.5.9 and the default
php
interpreter is 5.4. So I issue another command:$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist
This takes me one step further, but then some post-install commands from Laravel's
composer.json
comes into play, and installation crashes.This is due to the fact, that
composer.json
commands look like this:"post-install-cmd": [ "php artisan clear-compiled", "php artisan optimize" ],
As you can see, the "default" interpreter is used again!
Now, proper PHP files start with following shebang:
#!/usr/bin/env php
This is nice feature as PHP interpreter can be found under different locations on different systems. Unfortunatelly, in this case
env
command returns path to the first executable it finds in$PATH
environmental variable.How could I possibly alter current session environment or what kind of trick to perform so for the execution of whole Laravel installation process
php
command would invoke/usr/bin/php5.6
instead of/usr/bin/php
?I don't want to change
$PATH
variable or modify files likecomposer
,composer.json
or Laravel's CLI utilityartisan
.
Edit: also assume that I want to do this from regular user account (i.e. with no root permissions).
-
-
roomcays almost 9 yearsThis answer and a comment from Arkadiusz Drabczyk would be valid, but I forgot to mention, that I can't modify system symlinks (
/usr/bin/*
) as whole operation is to be done from common user account (no root). -
Alex Andrei almost 9 yearsupdated answer, although i see @mario already hinted towards
alias
-
roomcays almost 9 yearsThanks, I have answered about
alias
in the comment to my question. -
roomcays almost 9 yearsThat is it! I have entered:
PATH="/usr/lib64/php5.6/bin:$PATH" php /usr/bin/composer create-project laravel/laravel --prefer-dist
and installation completed successfully! SettingPATH
in one line with command does not change global PATH variable. Thanks a lot Guillaume Crico! -
Saiyan Prince about 7 yearsI was struggling with changing the version entirely... But your solution saved my day... +1 from me.. Thanks a tonne...
-
OZZIE almost 7 yearsUsing Mac nothing changes with either method, where do you unset the path to the default php?
-
mayid almost 7 yearsThis is not working for me:
env PATH="/opt/php71/bin/php:$PATH" php -v
keeps telling php 5.x -
mayid almost 7 yearsAlso tried this variant:
PATH="/opt/php71/bin/php:$PATH" sh -c 'php -v'
and it's the same. At least I can see the PATH is being modified if I runPATH="/opt/php71/bin/php:$PATH" sh -c 'echo $PATH | grep php'
but even having php 7 in the PATH the followingphp -v
command still executes php 5. -
Pezhvak over 6 yearscan't believe that this one really helped me! thanks!
-
Simon over 6 yearsThe first one, using 'set PATH' does not work for me on Debian. It does not change to 5.6.x. It is permanently 5.4.x.
-
Onur Demir over 6 yearssame for me,too
-
Kamae over 6 yearsI came from Google so I think it worth to say this has been the best solution for me. I tried the @Guillaume 's solution which is really usefull, but at least in my case, after the
composer update
the system was trying to do aphp artisan optimize
(using the wrongphp
version again). So I created analias
just for the current user and it worked like a charm. Please note you have to log out and log in, otherwise the alias does not take effect. Thanks Alex! -
voodoo417 over 5 years@Saleniex Bro,Thanks+++
-
user1111929 about 5 yearsThank you! Needed to search a lot to find this useful answer.
-
samerivertwice over 3 yearsThere's a bracket missing. Only you can edit it, as it's less than 6 chars change. "config": { "platform": { "php": "7.1" } },
-
samerivertwice over 3 yearsok, after doing this, entering /usr/bin/env php -v still gives me php 5.4.16
-
K.Karamazen over 3 yearsYou could use
sudo mv -n /usr/bin/php /usr/bin/php.old
in order to preserve a copy of the old version.