このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
composer:1.9:phpswitch [2020/03/13 09:57] y2sunlight [Composerを起動するPHPのバージョンを変更する方法] |
composer:1.9:phpswitch [2020/04/18 15:07] y2sunlight [Composerを起動するPHPのバージョンを変更する方法] |
||
---|---|---|---|
行 5: | 行 5: | ||
[[composer: | [[composer: | ||
+ | |||
+ | 関連記事 | ||
+ | |||
+ | * [[composer: | ||
+ | * ComposerをPHPバージョンで使い分ける | ||
+ | * [[composer: | ||
+ | * [[composer: | ||
+ | * [[composer: | ||
+ | * [[composer: | ||
+ | |||
+ | ---- | ||
「Windowsの開発環境下で各プロジェクト毎のPHPのバージョンを変えたい」と言う要求はよくあると思います。[[xampp: | 「Windowsの開発環境下で各プロジェクト毎のPHPのバージョンを変えたい」と言う要求はよくあると思います。[[xampp: | ||
行 10: | 行 21: | ||
ところが、Composerに関しては少し事情が違ってきます。問題の本質は、ComposerがPHPスクリプトで実装されているという点です。PHPスクリプトなので当然のことですがPHPによって起動され、そのPHPは通常PATH環境変数上のものが起動されます。従って、Composerを使う場合、PHPのバージョンがPATH環境変数上のものに制限されるので、プロジェクトによってPHPのバージョンを変えるには多少の工夫が必要になります。 | ところが、Composerに関しては少し事情が違ってきます。問題の本質は、ComposerがPHPスクリプトで実装されているという点です。PHPスクリプトなので当然のことですがPHPによって起動され、そのPHPは通常PATH環境変数上のものが起動されます。従って、Composerを使う場合、PHPのバージョンがPATH環境変数上のものに制限されるので、プロジェクトによってPHPのバージョンを変えるには多少の工夫が必要になります。 | ||
- | プロジェクト毎に環境変数を変える方法には、[[https:// | + | プロジェクト毎にPHP環境を変える方法には、[[https:// |
==== ComposerとPHPの関係 ==== | ==== ComposerとPHPの関係 ==== | ||
行 38: | 行 49: | ||
この時、ComposerはPHP7.2.8を対象としたphpdotenvパッケージを探します。以下は、自動生成されたcomposer.jsonです。phpdotenvのバージョンが4.1である点に注目しておいて下さい。 | この時、ComposerはPHP7.2.8を対象としたphpdotenvパッケージを探します。以下は、自動生成されたcomposer.jsonです。phpdotenvのバージョンが4.1である点に注目しておいて下さい。 | ||
- | < | + | < |
{ | { | ||
" | " | ||
行 54: | 行 65: | ||
最初に思いつくのは「composer.jsonでPHPのバージョンを指定できないか?」という事です。勿論これは可能で、Composer.jsonに config.php を追加します。 | 最初に思いつくのは「composer.jsonでPHPのバージョンを指定できないか?」という事です。勿論これは可能で、Composer.jsonに config.php を追加します。 | ||
- | < | + | < |
{ | { | ||
" | " | ||
行 114: | 行 125: | ||
この時、ComposerはPHP5.4.19を対象としたphpdotenvパッケージを探します。以下が、composer.jsonの内容です。 | この時、ComposerはPHP5.4.19を対象としたphpdotenvパッケージを探します。以下が、composer.jsonの内容です。 | ||
- | < | + | < |
{ | { | ||
" | " | ||
行 130: | 行 141: | ||
このようにPHP5.4.19を指定した場合、phpdotenvのバージョンが(PHP7.2.8を対象とした4.1ではなくて)3.6になっています。 | このようにPHP5.4.19を指定した場合、phpdotenvのバージョンが(PHP7.2.8を対象とした4.1ではなくて)3.6になっています。 | ||
- | この方法でComposerをPHPバージョンで使い分けるによる方法の利点は、プロジェクトで使用するIED(Eclipse)で設定しているPHPのバージョンと同じものをcomposer.jsonで指定するだけで良く、設定が非常に分かり易い点です。但し、php.exeとcomposer.batにPATHを通しておく必要があります。 | + | この方法でComposerをPHPバージョンで使い分けるによる方法の利点は、IED(Eclipse)で設定しているPHPのバージョンと同じものをcomposer.jsonで指定するだけで良く、設定が非常に分かり易い点です。但し、php.exeとcomposer.batをPATH環境変数に設定しておく必要があります。 |
\\ | \\ | ||
行 146: | 行 157: | ||
</ | </ | ||
- | * [1行名] コメント | + | * [2行名] コメント |
- | * [2行名] 遅延環境変数の展開を無効にする | + | * [3行名] 遅延環境変数の展開を無効にする |
- | * [3行目] PATH環境変数の通っているphp.exeでcomposer.pharを起動する(%~dp0 は composer.bat の存在するドライブ文字とパスを表す。上のに場合 C: | + | * [4行目] PATH環境変数の通っているphp.exeでcomposer.pharを起動する(%~dp0 は composer.bat の存在するドライブ文字とパスを表す。上のに場合 C: |
composer.batで何が起こっているか分かれば話は簡単です。インストールされているcomposer.pharはこのまま使う事にして、composer.batだけをプロジェクトフォルダ(composer.jsonと同じフォルダ)にコピーしてcomposer.batを以下のように変更します。 | composer.batで何が起こっているか分かれば話は簡単です。インストールされているcomposer.pharはこのまま使う事にして、composer.batだけをプロジェクトフォルダ(composer.jsonと同じフォルダ)にコピーしてcomposer.batを以下のように変更します。 | ||
行 160: | 行 171: | ||
</ | </ | ||
- | 変更箇所は3行目です。php.exeとcomposer.pharを絶対パスに変更します。この例ではPHPのバージョンを現在使用しているもの(7.2.8)から7.3.15に上げています。 | + | 変更箇所は4行目です。php.exeとcomposer.pharを絶対パスに変更します。この例ではPHPのバージョンを現在使用しているもの(7.2.8)から7.3.15に上げています。 |
Composer diag 以下を実行すると確かに動いていることが確認できます。 | Composer diag 以下を実行すると確かに動いていることが確認できます。 | ||
行 173: | 行 184: | ||
Checking disk free space: OK | Checking disk free space: OK | ||
Checking pubkeys: | Checking pubkeys: | ||
- | Tags Public Key Fingerprint: | + | Tags Public Key Fingerprint: |
- | Dev Public Key Fingerprint: | + | Dev Public Key Fingerprint: |
OK | OK | ||
Composer version: 1.9.3 | Composer version: 1.9.3 | ||
行 181: | 行 192: | ||
</ | </ | ||
- | この方法では、composer.batをプロジェクトフォルダ内に保存することで分かり易くなります。また、この方法ではPATH環境変数が必要なくなります(Eclipseではphp.exeは絶対Path指定、Composer以外でPATHを使用していない場合)。但し、composer.batは絶対パスを含むので環境依存となり、プロジェクトメンバでこのファイルを共有する場合は、注意が必要です。 | + | この方法では、composer.batをプロジェクトに取り込んでいるので既定のPHPバージョンを意識する必要が無く、PATH環境変数も必要ありません(Eclipseもphp.exeは絶対Path指定、Composer以外でPATHを使用していない場合php.exeのPATHは不要になります)。但し、composer.batは絶対パスを含むので環境依存となり、プロジェクトメンバでこのファイルを共有する場合は注意が必要です。悩ましい限りです。 |
+ | |||
+ | \\ |