darudaru

だるだるしてるエンジニア

macでphpのバージョンを切り替える

php7が入っているmacでphp5.6の環境を必要になったので、phpenvでphpのバージョンを切り替えられるようにしました。

phpenv

GitHub - CHH/phpenv: Thin Wrapper around rbenv for PHP version managment

「phpenv」でググると他にもphpenvと名がつくリポジトリがヒットしますが、こちらを使用した方がよいです。他のphpenvは開発も止まっており、使おうとしてもエラーが発生して使えません(体験談)

% git clone https://github.com/CHH/phpenv.git
% phpenv/bin/phpenv-install.sh

インストールが完了すると、.bashrcに記述すべき設定を出力してくれるので、そのまま記載しましょう。わたしは、環境設定のもの+zshを使っている、ということから.zprofileに設定を追加しました。

 export PATH="$HOME/.phpenv/bin:$PATH"                                                                                                                                         
 eval "$(phpenv init -)"

source ~/.zprofileで設定を読み込み、phpenv --versionでphpenvのバージョンが確認できればインストール完了です。

php-build

GitHub - php-build/php-build: Builds PHP so that multiple versions can be used side by side.

PHPの環境を構築するツール。これとphpenvを組み合わせてphpのバージョンを切り替えられるようになります。

%  git clone https://github.com/php-build/php-build.git $HOME/.phpenv/plugins/php-build

インストールはこれだけ。

phpのバージョンを切り替える

phpenv install --listで利用可能なバージョンがいっぱい表示されるので、必要なものを選んでphpenv install バージョン番号でインストールをします。 インストールには結構時間がかかるので、のんびり待ちます。

わたしはphp5.6系をインストールしたのですが、途中でパッケージが無いとエラーが出たのでそのパッケージのインストールを行いました。

% phpenv install 5.6.17
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: 3.0).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: mcrypt.h not found. Please reinstall libmcrypt. 

% brew reinstall libmcrypt

指定したバージョンのphpのインスールが完了したらあとは切り替えるだけ。

% phpenv global 5.6.17
% phpenv versions
  system
* 5.6.17 (set by /Users/username/.phpenv/version)

php --versionでも切り替わっていることが確認できます。わたしの場合、切り替え前のphpのバージョンが出力され、なんでーって悩んでたのですがターミナルを再起動したらちゃんと新しいバージョンが表示されました。
ちなみに、ディレクトリごとにphpのバージョンを切り替えることもできるらしい。phpenv local バージョン番号ってやると、カレントディレクトリのみで使えるようになるんだって。プロジェクトごとに違うphpのバージョンを指定して使えるということですね、すごい。

感想

phpのバージョンを下げないと動かないってどうすれば・・・ダウングレードする?Dockerで環境作る?と色々頭がよぎりしましたが、とても簡単に切り替える環境を作ることができました。