概要
ある日 composer install
するとこんな警告が出た
phpunit/phpunit 5.7.21 requires php ^5.6 || ^7.0 -> your PHP version (5.5.20) does not satisfy that requirement.
phpunit 5.7.21 を利用するには php5.6 以上または php7.0 以上が必要だが、あなたのPHPのバージョンは 5.5.20 です、というエラーだ。あれ、PHPは5.6をインストールしていたはずだと思って確認してみると…
$ php -v PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
確かに5.5.20になっていた。
MacとHomebrewのバージョン
- Mac OS 10.10.3 Yosemite
- Homebrew 1.3.1-49-gdaa0ea4
brewで入れたphpはどこに入っているのか
僕以前に brew install php56
してPHPを入れていた。brewでいれたライブラリなどは /usr/local/Cellar
に入っている。php56
は /usr/local/Cellar/php56
以下に入っている。
$ ls /usr/local/Cellar/php56 5.6.11_2/ 5.6.22/ 5.6.31_7/
このPCには 5.6.11_2, 5.6.22, 5.6.31_7 の3つのバージョン*1が入っているようだ。
PHPのpathを確認して差し替える
今のPHPがどこから入れられたものなのか確認してみる。
$ which php /usr/bin/php $ ls -la /usr/bin/php -rwxr-xr-x 1 root wheel 9942272 2 26 2015 /usr/bin/php*
phpなどのコマンドは、大抵 /usr/bin
か /usr/local/bin
に入っている。通常Homebrewで何かをインストールすると、 /usr/local/Cellar
以下に実体があり、 /usr/local/bin
以下から Cellar 以下にシンボリックリンクが貼られる形となるハズなのだが、この /usr/bin/php
はシンボリックリンクではなく実体のようだ。そして /usr/local/bin/php
が存在するかどうかを確認してみたが、こちらは存在しないようだった。とりあえずこの /usr/bin/php
をなんとかしたい。 rm
コマンドで消してしまっても良いのだが、安全のため名前を変更することにした。
$ sudo mv /usr/bin/php /usr/bin/php55
これでphpコマンドが一旦使えなくなる(かわるにphp55コマンドが使えるようになる)。あとは /usr/local/Cellar/php56
以下からシンボリックリンクを貼れば良い。今までは 5.6.22 を使っていたので、phpコマンドを叩くとこのバージョンのphpが呼ばれるようにする。
$ sudo ln -s /usr/local/Cellar/php56/5.6.22/bin/php /usr/local/bin/php $ php -v PHP 5.6.22 (cli) (built: Sep 30 2016 20:04:55) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
php5.6になった。これにより、composerもこのphpを使うようになるので、問題なく composer install
が成功した。
*2
まとめ
Homebrewで入れたライブラリがどこに入っているのか、pathはどうなっているかを知っておくとこういった問題にすぐ対応できるので、ぜひ知っておきたい。