Tell Composer использовать другую версию PHP

Я застрял в этом несколько дней. Я использую хостинг 1and1, и у них есть свой PHP, настроенный немного странно.

Если я использую только php composer.phar install, то я использую PHP 4.4.6, что ужасно недостаточно. Тем не менее, я могу запустить php5.5 composer.phar install, немного php5.5 composer.phar install, но он все равно терпит неудачу, потому что где-то вдоль строки PHP вызывается снова, но он терпит неудачу, поскольку он использует 4.4.6.

Есть ли способ сказать Composer использовать команду php5.5? Кто-нибудь успешно получил Composer, настроенный на 1 и 1 хостинг?

Я пытаюсь запустить Laravel (который использует Composer). Я смог сделать это в моем домене GoDaddy, но не 1 и 1.

Ответ 1

Случай Ubuntu 18.04... этот пробег для меня.

/usr/bin/php7.1 /usr/local/bin/composer update

Ответ 2

На xubuntu у меня был php 7.2 по умолчанию. Но нужно было запустить композитора с php 5.6.

Так что это сработало для меня:

php5.6 /usr/bin/composer

Ответ 3

У меня тоже есть общий хостинг на 1 & 1 (ionos) и вот что мне нужно было сделать:

если вы войдете в систему как root ssh, вы можете создать ~/.bash_profile и добавить

alias php="php7.1"
alias composer="php7.1 composer.phar"

так что теперь вы можете использовать команды, которые вы обычно используете, и это просто работает. (поместите composer.phar в корневой каталог вашего проекта)

Затем убедитесь, что ваш файл laravel composer.lock с вашего компьютера dev подключен к папке вашего проекта на 1and1 и запустите

composer install

Используя этот совет от @tobymackenzie: на общих хостах вы действительно должны просто запустить установку composer (не обновлять!) Из файла composer.lock, который вы создали на своем компьютере. Таким образом, использование памяти остается очень низким.

У меня все еще были проблемы STDIN с командами кустарного промысла, поэтому убедитесь, что вы изменили файл .env на

APP_ENV=local

потому что его установка на производство генерирует бесконечные предупреждения STDIN, поскольку он ждет, пока вы наберете yes. По крайней мере, на моем счету это так.

Надеюсь, это кому-нибудь поможет.

Ответ 4

Попробуйте этот подход

ea-php72 /opt/cpanel/composer/bin/composer

Ответ 5

Вы можете изменить свой PATH чтобы переопределить версию php.

PATH="/home/user/bin:$PATH"

В /home/user/bin (или любой другой каталог действительно) создайте символическую ссылку с именем php в двоичный файл php5.

Другой вариант, используйте псевдоним оболочки:

alias php="/path/to/php5"

Ответ 6

Просто добавьте приведенный ниже код в ваш файл composer.json, чтобы установить другую версию php.

"config": {

    "platform": {

        "php": "7.1.3"

    }

}

Ответ 7

Вы можете попытаться скопировать файлы php и php-config в /usr/local/bin. Этот путь имеет более высокий порядок приоритета и должен переопределять папку /usr/bin без необходимости отключения SIP. Это то, что я сделал.

Ответ 8

php5.5 composer.phar install не выполняется, потому что ваш composer.json говорит ему, чтобы он запускал php а не php5.5, отредактировал файл composer.json заменив ссылки на php-скрипты на php5.5. Пример:

Из:

"post-root-package-install": [
    "php -r \"copy('.env.example', '.env');\""
],

Для того, чтобы:

"post-root-package-install": [
    "php5.5 -r \"copy('.env.example', '.env');\""
],

Даже при этом 1and1 имеет ограничение памяти для выполнения скриптов, поэтому php5.5 composer.phar install не будет терпеть неудачу, но также не завершит ее выполнение. Вы все равно можете запустить скрипты post install вручную.

Я использовал Laravel webapps для 1and1 без каталога vendor, следуя этому руководству: Разверните Laravel Webapp до 1 и 1

Ответ 9

composer - это бинарный скрипт PHP, использующий Unix Shebang для определения, какой интерпретатор выполнять.

[email protected]:~# 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

Так что, если вы работаете с composer без какой-либо конкретной опции, он будет использовать вашу версию PHP в /usr/bin/env php (это ваш PHP по умолчанию)

У нас может быть много версий PHP внутри вашего Linux, и вы можете гибко использовать какую версию PHP для выполнения так, как вы хотите, следующим образом:

[email protected]:~# /usr/bin/php7.1 /usr/local/bin/composer update

Или просто

[email protected]:~# php7.1 /usr/local/bin/composer
[email protected]:~# php7.2 /usr/local/bin/composer
[email protected]:~# php7.3 composer
...

Чтобы проверить и найти все установленные пакеты PHP, перейдите в /usr/bin/

[email protected]:~# 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

Ответ 10

Знайте, этот вопрос немного устарел... но если вы загрузите composer в корень своего приложения:

https://getcomposer.org/download/

Вместо того, чтобы полагаться на глобального композитора, вы можете запустить:

php56 composer.phar {ваша команда}

или я верю, что новые версии Homstead будут выглядеть так:

php7.1 composer.phar {ваша команда}

https://laracasts.com/discuss/channels/laravel/run-composer-commands-with-different-php-versions