だから私は3つのPHPバージョンがインストールされたGentooボックスを持っています(理由を気にしないでください):
/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ファイルは次のシェバンで始まります:
#!/usr/bin/env php
PHPインタープリターは異なるシステムの異なる場所にあります。残念なことに、この場合、env
コマンドは$PATH
環境変数で最初に見つかった実行可能ファイルへのパスを返します。
現在のセッション環境を変更したり、Laravelインストールプロセスphp
コマンドが/usr/bin/php5.6
の代わりに/usr/bin/php
を起動するために実行するトリックをどのように変更できますか?]
$PATH
変数を変更したり、composer
、composer.json
、LaravelのCLIユーティリティartisan
などのファイルを変更したくありません。
編集:また、通常のユーザーアカウント(つまり、root権限なし)からこれを行うと仮定します。
たぶん、あなたは環境を修正しようとすることができます!
$ 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) ...
デフォルト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バージョンがインストールされていることを確認する必要があります。
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'
これがうまくいくかどうかを確認してください
PHP7が登場して以来、Debian Linuxはデフォルトで/ usr/binにPHPバージョン5および7の異なる実行可能ファイルを作成します(両方のバージョンをインストールする場合)。
コマンドラインからこれらの異なるバージョンを呼び出すことは、今までと同じくらい簡単です。
kkarski@debian:~ $ 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
kkarski@debian:~ $ 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サーバーが使用しているバージョンを変更するには、次を実行するだけです。
root@debian:~# 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で同様の問題が発生した場合に言及する。
上記で解決策を見つけられなかった他の人は、composer update
と何らかの形で間違ったPHPバージョンが使用されます。composer self-update
さらに情報を得て、最終的にcomposer.json
platform
セクションでconfig
を指定できます。これは、コンポーザーが使用するphpバージョンをオーバーライドします。この値を変更するか、この構成を削除するだけで問題が解決しました。
composer.json"config": { "platform": { "php": "7.1" },
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
は宛先/リンクです