Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use different PHP version CLI executable for one command

So I have Gentoo box with three PHP versions installed (nevermind the reasons):

  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

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 like composer, composer.json or Laravel's CLI utility artisan.


Edit: also assume that I want to do this from regular user account (i.e. with no root permissions).

like image 658
roomcays Avatar asked Jul 03 '15 12:07

roomcays


People also ask

Can we use PHP to write command line scripts which version?

As of version 4.3. 0, PHP supports a new SAPI type (Server Application Programming Interface) named CLI which means Command Line Interface. As the name implies, this SAPI type main focus is on developing shell (or desktop as well) applications with PHP.

Can PHP used for command line application?

Introduction. PHP is well known for its popularity with web applications and CMSs, but what many people don't know is that PHP is also a great language for building command line applications that don't require a web server.


2 Answers

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.

like image 96
Saleniex Avatar answered Sep 24 '22 17:09

Saleniex


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) ... 
like image 36
Guillaume Crico Avatar answered Sep 21 '22 17:09

Guillaume Crico