Подтвердить что ты не робот

Используйте разные исполняемые файлы CLI версии PHP для одной команды

Итак, у меня есть поле Gentoo с тремя установленными версиями PHP (не забудьте причины):

  • /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

Я хочу установить структуру Laravel с помощью композитора:

$ composer create-project laravel/laravel --prefer-dist

Однако это порождает ошибку, поскольку Laravel требует PHP > 5.5.9, а интерпретатор php по умолчанию 5.4. Поэтому я выдаю еще одну команду:

$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist

Это делает меня еще на один шаг, но затем некоторые команды после установки из Laravel composer.json вступают в игру, а сбой установки.

Это связано с тем, что команды composer.json выглядят следующим образом:

"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize"
],

Как вы можете видеть, интерпретатор по умолчанию используется снова!

Теперь правильные PHP файлы начинаются со следующего shebang:

#!/usr/bin/env php

Это хорошая функция, поскольку PHP-интерпретатор можно найти в разных местах в разных системах. К сожалению, в этом случае команда env возвращает путь к первому исполняемому файлу, который он находит в переменной $PATH.

Как я могу изменить текущую среду сеанса или какой трюк выполнить для выполнения всего процесса установки Laravel. php команда будет вызывать /usr/bin/php5.6 вместо /usr/bin/php?

Я не хочу изменять переменную $PATH или изменять файлы типа composer, composer.json или утилиту CLAR Laravel artisan.


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

4b9b3361

Ответ 1

Возможно, вы можете попытаться исправить окружающую среду!

$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...

Или, если вы не хотите изменять PATH для сеанса оболочки, вы можете изменить только текущую команду:

$ 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) ...

Ответ 2

Исполняемый файл PHP по умолчанию можно найти, используя:

$ which php

В большинстве случаев это ссылка на конкретную версию PHP:

lrwxrwxrwx 1 root root      21 aug 15  2016 /usr/bin/php -> /usr/bin/php7.1

Чтобы изменить его на другую версию, просто переместите его в другой

$ sudo rm /usr/bin/php

$ sudo ln -s /usr/bin/php5.6 /usr/bin/php

Прежде чем переходить, вы должны убедиться, что установлена ​​целевая версия PHP.

Ответ 3

Определите, где находится текущая общая php команда и к которой она указывает с помощью which php.

Это даст вам путь к символической ссылке, как вы упомянули в своем вопросе

/usr/bin/php -> /usr/lib64/php5.4/bin/php

Отредактируйте символическую ссылку, чтобы указать, на какую версию php вы хотите сейчас, см. здесь https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

Когда вы закончите, просто измените процесс.

UPDATE: вы также можете добавить alias для текущего пользователя, отредактировав ~/.bashrc и добавив следующие

alias php='/usr/bin/php5.6'

посмотрите, работает ли это

Ответ 4

С момента появления PHP7 Debian Linux по умолчанию создает разные исполняемые файлы для PHP версий 5 и 7 в /usr/bin (если вы устанавливаете обе версии).

Вызов этих разных версий из командной строки прост, как сейчас:

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


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

Это, очевидно, полезно только для простых скриптов. Для чего-либо большего (композитора, ремесленника и т.д.) Вам придется изменить переменную PATH.

Для изменения версии вашего сервера Apache используется все, что вам нужно сделать:

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

и наоборот, если вы хотите использовать более низкую версию PHP.

Упоминание об этом в случае, если у кого-то есть подобные проблемы на Debian.

Ответ 5

Для тех, кто не нашел решения в вышеупомянутом, потому что они используют composer update и как-то используется неправильная версия PHP. Используя composer self-update я получил некоторую дополнительную информацию и, в конце концов, узнал, что в composer.json вы можете указать platform в разделе config, которая переопределяет, какая версия php используется композитором. Просто изменив это значение или удалив эту конфигурацию, я решил проблему.

composer.json "config": { "platform": { "php": "7.1" },

Ответ 6

Это можно сделать с помощью alias, но имейте в виду, что псевдонимы не расширены по умолчанию.

Вы также должны включить их расширение.

shopt -s expand_aliases alias php="/usr/local/bin/php-5.6"./some-script.sh unalias php # back to previous version

Ответ 7

Я считаю, что проще всего добиться того же, например, создать мягкую ссылку, как, например,

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

тогда, когда вы используете вашу версию по умолчанию, скажите, что это php7.2, так как просто php для альтернативной версии вы можете php7 или php71 или php56

здесь ln -s/opt/php-7.1/bin/php/usr/bin/php71 - исходный/оригинальный файл, а /usr/bin/php7 - пункт назначения/ссылка

Ответ 8

Буэн диам. Привет, спасибо! Обновление $/opt/cpanel/ea-php71/root/usr/bin/php/opt/cpanel/composer/bin/composer