web-dev-qa-db-ja.com

1つのコマンドに別のPHPバージョンCLI実行可能ファイルを使用

だから私は3つのPHPバージョンがインストールされたGentooボックスを持っています(理由を気にしないでください):

  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

コンポーザーを使用して 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ファイルは次のシェバンで始まります:

#!/usr/bin/env php

PHPインタープリターは異なるシステムの異なる場所にあります。残念なことに、この場合、envコマンドは$PATH環境変数で最初に見つかった実行可能ファイルへのパスを返します。

現在のセッション環境を変更したり、Laravelインストールプロセスphpコマンドが/usr/bin/php5.6の代わりに/usr/bin/phpを起動するために実行するトリックをどのように変更できますか?]

$PATH変数を変更したり、composercomposer.json、LaravelのCLIユーティリティartisanなどのファイルを変更したくありません。


編集:また、通常のユーザーアカウント(つまり、root権限なし)からこれを行うと仮定します。

33
roomcays

たぶん、あなたは環境を修正しようとすることができます!

$ 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) ...
35
Guillaume Crico

デフォルト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バージョンがインストールされていることを確認する必要があります。

27
Saleniex

which phpを使用して、現在の汎用phpコマンドの場所と、それが指すバイナリを識別します。

あなたの質問で言及したようなシンボリックリンクへのパスを提供します

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

シンボリックリンクを編集して、今のところどのphpバージョンを使用するかを指定します。こちらを参照してください https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

完了したら、プロセスを逆にします。

更新:~/.bashrcを編集して以下を追加することにより、現在のユーザーのaliasを追加することもできます

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

これがうまくいくかどうかを確認してください

10
Alex Andrei

PHP7が登場して以来、Debian Linuxはデフォルトで/ usr/binにPHPバージョン5および7の異なる実行可能ファイルを作成します(両方のバージョンをインストールする場合)。

コマンドラインからこれらの異なるバージョンを呼び出すことは、今までと同じくらい簡単です。

[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で同様の問題が発生した場合に言及する。

6

上記で解決策を見つけられなかった他の人は、composer updateと何らかの形で間違ったPHPバージョンが使用されます。composer self-updateさらに情報を得て、最終的にcomposer.jsonplatformセクションでconfigを指定できます。これは、コンポーザーが使用するphpバージョンをオーバーライドします。この値を変更するか、この構成を削除するだけで問題が解決しました。

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

1
Rein Baarsma

aliasを使用して行うことは可能ですが、エイリアスはデフォルトでは展開されないことに注意してください。

これらの拡張も有効にする必要があります。

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

たとえば、次のようなソフトリンクを作成するなど、同じことを達成するのが最も簡単です

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であると言うことができますphp7 または php71 または php56

ここに ln -s /opt/php-7.1/bin/php /usr/bin/php71はソース/元のファイルであり、/usr/bin/php7は宛先/リンクです

0
Joshi