Tell Composer to use Different PHP Version
PhpLinuxLaravelComposer PhpPhp Problem Overview
I've been stuck at this for a few days. I'm using 1and1 hosting, and they have their PHP set up a bit weird.
If I use just php composer.phar install
, then I'm using PHP 4.4.6, which is horribly insufficient. However, I can run php5.5 composer.phar install
, get a little bit further, but it still fails because somewhere along the line, PHP is called again, but it fails, as it's using 4.4.6.
Is there any way to tell Composer to use the php5.5
command? Has anyone successfully gotten Composer configured on 1and1 hosting?
I'm trying to get Laravel up and running (which uses Composer). I've been able to do it on my GoDaddy domain, but not 1and1.
Php Solutions
Solution 1 - Php
Ubuntu 18.04 case ... this run for me.
/usr/bin/php7.1 /usr/local/bin/composer update
Solution 2 - Php
Maybe this can't solve exactly your issue but probably it will help others who comes here from web search.
Just add below code to your composer.json file to set different php version:
"config": {
"platform": {
"php": "7.1.3"
}
}
Solution 3 - Php
On xubuntu I had php 7.2 as default. But needed to run composer with php 5.6.
So this worked for me:
php5.6 /usr/bin/composer
Solution 4 - Php
If you just need to get composer to ignore the version requirements, you can bypass using:
composer install --ignore-platform-reqs
Solution 5 - Php
You always can use that way.
In project folder where you has composer.json file. Run the command
php7.4 /usr/local/bin/composer install
or
php7.4 /usr/local/bin/composer update
where php7.4 your specific version can be(php7.0, php5.5, php7.3 etc...) where /usr/local/bin/composer path for system folder with composer
!!! you should have php7.4-cli
sudo apt-get install -y php7.4-cli
That way for linux/ubuntu user
Cheers ;-)
Solution 6 - Php
composer
is a PHP binary script and it's using Unix Shebang to define which interpreter for executing.
root@home:~# head /usr/local/bin/composer -n 5
#!/usr/bin/env php
<?php
/*
* This file is part of Composer.
*
/usr/bin/php7.1 /usr/local/bin/composer update
So if you're running composer
without any specific option, it will use your PHP version at /usr/bin/env php
(which is your default PHP)
We can have many versions of PHP inside your Linux and you can flexible use which PHP version for executing as you want like this way:
root@home:~# /usr/bin/php7.1 /usr/local/bin/composer update
Or just
root@home:~# php7.1 /usr/local/bin/composer
root@home:~# php7.2 /usr/local/bin/composer
root@home:~# php7.3 composer
...
To check & find all installed PHP packages, goto /usr/bin/
root@home:~# ls /usr/bin/ | grep php
php
php5.6
php7.1
php7.2
php7.3
php-config
php-config7.1
phpdbg
phpdbg5.6
phpize
phpize7.1
Solution 7 - Php
I too have a shared hosting account on 1&1 (ionos) and here's what I have had to do:
if you login as the root ssh account, you can create a ~/.bash_profile and add
alias php="php7.1"
alias composer="php7.1 composer.phar"
to it so that you can now use the commands you would normally use and it just works. (put composer.phar in your project folder root)
Then, make sure your laravel composer.lock file from your dev machine gets up to your project folder on 1and1 and run
composer install
>Using this tip from @tobymackenzie: on shared hosts you really should just run composer install (not update!) from a composer.lock file you created on your own machine. That way the memory usage remains very low.
I still had STDIN issues with artisan commands so make sure you change the .env file to
APP_ENV=local
because having it set to production throws infinite STDIN warnings as it waits for you to type yes
. At least on my account it does.
Hope this helps somebody.
Solution 8 - Php
Try this approach
ea-php72 /opt/cpanel/composer/bin/composer
Solution 9 - Php
In my case, Composer detected PHP version 7.2.6 but my actual PHP Version was 8.0.2 .So , I did the following steps and It was the solution for me.
Step 01:- Add below code to your composer.json file
"config": {
"platform": {
"php": "7.2.6"
}
}
Step 02:- Then, run the below command.
C:\xampp\htdocs\your project name>composer update
Solution 10 - Php
The existing answers partly do not answer the question, give suggestions that do not work or give bad advice.
The question stated:
> However, I can run php5.5 composer.phar install, get a little bit further, but it still fails because somewhere along the line, PHP is called again, but it fails, as it's using 4.4.6.
Instead, I am here showing a way to test and verify the suggestions.
I wish I had a better answer myself but I am unsure what is the best solution. Personally I would go with a solution which make sure PHP is called with the correct version on the host (e.g. via an alias or setting the PHP environment correctly, running the entire operation inside a container or some other solution), regardless of Composer and add a platform php constraint.
If you don't run any scripts and just need the requirements to resolve the dependencies correctly config:platform:php would probably be your friend.
Let's say our default php version is 7.4 but our project requires 7.2.
-
Check your default PHP version
command line:
# shows version of default PHP php --version # show path of default PHP which php # show version of /usr/bin/env php # /usr/bin/env php --version
-
Create a test script in your composer.json
"scripts": { "php-version": "php --version" }
Now you can test what version of PHP is used for the commands Composer calls, e.g.
composer php-version /usr/bin/php7.2 /usr/bin/composer php-version
In my case, both of these use my default php script (which is version 7.4). So, while the 7.2 version is used to run Composer, the scripts called by Composer use the default command.
-
Now let's add the platform setting as suggested in some of the answers
"config": { "platform": { "php": "7.2.0" } }
Does not change anything for the script execution:
/usr/bin/php7.2 /usr/bin/composer php-version # result is still 7.4
Actually, what the platform option is important for is resolving the requirements, so you should add it (in your project composer.json). It just won't solve the above problem of composer using PHP with the correct version. See also Composer docs for platform.
Solution 11 - Php
You could change your PATH
to override the php version.
PATH="/home/user/bin:$PATH"
In /home/user/bin
(or any other directory really) make a symlink named php to the php5 binary.
Another option, use a shell alias:
alias php="/path/to/php5"
Solution 12 - Php
Know this question is a bit old... but if you pull down composer into your app root:
https://getcomposer.org/download/
Instead of relying on global composer, then you can run:
>php56 composer.phar {your command}
or I believe newer homstead versions would be like:
>php7.1 composer.phar {your command}
https://laracasts.com/discuss/channels/laravel/run-composer-commands-with-different-php-versions
Solution 13 - Php
Ubuntu 18.04
case ... this works for me. Here, Composer picks the required PHP version automatically.
/opt/lampp/bin/php /usr/bin/composer install
OR
/opt/lampp/bin/php /usr/bin/composer update
Solution 14 - Php
I'm on a Hostgator shared account, the following worked for me:
-
First, find out where your desired version of PHP lives (you can start typing
ea-php
and hitTAB
to list all available executables starting withea-php
):which ea-php73
/usr/local/bin/ea-php73
-
Then, find out where composer lives:
which composer
/opt/cpanel/composer/bin/composer
-
Then use those to run your composer command:
/usr/local/bin/ea-php73 /opt/cpanel/composer/bin/composer install
Solution 15 - Php
For people using Plesk, you need the different pieces:
- Get the PHP version required from
/opt/plesk/php/<version/bin/php
, eg/opt/plesk/php/7.4/bin/php
- Get the real path of composer since
/usr/local/bin/composer
is a custom Plesk script by vieweing the script contents (cat /usr/local/bin/composer
). In my case, it was/usr/local/psa/var/modules/composer/composer.phar
- Put it all together:
# /opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar install
... or to make it simpler, just create a new file ( I like composer74
) in /usr/local/bin
:
cat > /usr/local/bin/composer74
to create the file- paste the following:
#!/bin/bash
/opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar
insto the terminal
- Hit
CTRL+D
to save the file chmod +x /usr/local/bin/composer74
to make it executable- Use it anywhere:
# composer74 install
Solution 16 - Php
There are two ways to do it.
- Tell the composer to ignore the platform requirements while running the command in the terminal.
composer update --ignore-platform-reqs
- Tell the composer to ignore the platform requirements in the
composer.json
file in the project root directory.
"config": {
"platform-check": false,
},
Solution 17 - Php
We can tell Composer, what version of PHP we are supporting with our app by using the platform configuration in our composer.json file by adding the following configuration,
{
"config": {
"platform": {
"php": "5.5"
}
},
"require": {
...
}
}
Or from the command-line
composer config platform.php 5.5
Solution 18 - Php
php5.5 composer.phar install
fails because your composer.json
is telling it to run php
and not php5.5
, edit the file composer.json
replace the php scripts references to php5.5
. Example:
From:
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
To:
"post-root-package-install": [
"php5.5 -r \"copy('.env.example', '.env');\""
],
Even when doing this, 1and1 has a memory limit for scripts execution so php5.5 composer.phar install
won't fail but it won't complete its execution either. You can still run the scripts post install manually.
I have deployed Laravel webapps to 1and1 without commit vendor
directory, following this guide: Deploy Laravel Webapp to 1and1
Solution 19 - Php
Must add in two places in your composer.json file to set different php version:
"config": {
"platform": {
"php": "7.4"
}
}
"require": {
"php": "^7.4",
}
Solution 20 - Php
I had no luck with any of above answers, I had auto scripts in composer.json so just ignoring or faking platforms just caused failed scripts etc. Setting php version in command just didn't work!
I did notice however that although running which php
and php -v
returned correct version which /usr/bin/env php
returned the problematic version of php that composer was using. So found a very good answer here and outlined below:
Issue:
/usr/bin/env php
looks for an executable named php
in the current $PATH
; it pays no attention to aliases, shell functions, etc. If you want it to execute php v5.3, you have to put that version in a directory under the name php, and put that directory in your PATH somewhere before the directory that contains the problematic version.
Fix:
Create new php executable folder like below with your specific php executable linked inside:
mkdir /usr/local/bin/php-overrides
ln -s /usr/local/bin/php7 /usr/local/bin/php-overrides/php
Add below to your ~/.bash_profile
(or other appropriate startup script):
PATH="/usr/local/bin/php-overrides:$PATH"
https://serverfault.com/questions/579956/alias-doesnt-work-in-script-with-usr-bin-env-php
Solution 21 - Php
With PHP 8 and 8.1 coming out, I have to work with a couple of versions regularly in the CLI, and the best way I found to do this was to create an alias.
Assuming you installed using brew, or already know where your version of PHP is.
Add the following to your bash profile.
alias php7='/usr/local/opt/[email protected]/bin/php'
alias php8='/usr/local/opt/[email protected]/bin/php'
If you want you can install PHP 8.1 as well with brew install [email protected]
and add another alias.
This will allow you to run php8 composer
, you can do a quick test by creating an index.php
file and adding phpinfo()
to it.
php7 index.php | grep "PHP Version"
php8 index.php | grep "PHP Version"
Solution 22 - Php
You could try and copy the php and php-config files into /usr/local/bin instead. That path has a higher order of precedence and should override the /usr/bin folder without needing to disable SIP. That is what I did.
Solution 23 - Php
i have a method to slove this problem.
export PATH=/usr/local/Cellar/php/8.0.12/bin:$PATH && composer -vvv
Temporarily change environment variables and use composer