schedule2019-11-28

別のバージョンのPHPでcomposerとartisanを実行する

バーチャルホストで幾つかのバージョンが同居するサーバでLarabelの環境を構築中に、デフォルトのPHPと異なるバージョンでcomposerを実行する必要があった。

環境

  • composer 1.9.1
  • CentOS 7.4

異なるバージョンのPHPが同居するサーバです。 phpコマンドはデフォルトでPHP 5.5が、その他はphp73のようにしてバージョンを指定して実行します。(Remiでインストールした)

  • php --version : PHP 5.5
  • php72 --version : PHP 7.2
  • php73 --version : PHP 7.3

また、PHP-FPMのポートを分けてバーチャルホスト別に異なるバージョンを利用しています。

今回このサーバにPHP7.3向けに作ったLaravelのプロジェクトを置く際にこの問題に行き当たりました。

PHPのバージョンを指定して実行する

composer

以下のようにPhar アーカイブを指定して実行しました。

$ php73 /path/to/composer.phar install

# もしくは
$ php72 /usr/local/bin/composer install  # PHP7.2で実行
$ php73 /usr/local/bin/composer install  # PHP7.3で実行

composerはhttps://getcomposer.org/download/の手順でインストールしています。 composerのインストール時にphpコマンドを使うが、この時もphpのバージョンを気にした方が良いのか?はよくわからない。

artisan

artisanコマンドも同様にphp**でバージョンごとにできます。

$ php72 artisan migrate  # PHP7.2で実行
$ php73 artisan migrate  # PHP7.3で実行

古いバージョンのPHPでcomposerコマンドを叩くと

PHPのバージョンが古いとcomposer installはできない。

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php ^7.1.3 but your PHP version (5.5.38) does not satisfy that requirement.
  Problem 2
    - beyondcode/laravel-dump-server 1.3.0 requires php ^7.1 -> your PHP version (5.5.38) does not satisfy that requirement.
    - beyondcode/laravel-dump-server 1.3.0 requires php ^7.1 -> your PHP version (5.5.38) does not satisfy that requirement.
    - Installation request for beyondcode/laravel-dump-server 1.3.0 -> satisfiable by beyondcode/laravel-dump-server[1.3.0].

こちらのようにcomposer.jsonを修正してPHPのバージョンを指定できる。

参考