anyenvで入れたphpenvでMacにPHPをインストールする

前提

  • 対象OS: Mac OSX 10.9.2 Mavericks
  • 既存のPHP(/usr/bin/php)を残す

しょうもない系が続く。 最近お仕事的にぺちぺちするところもあって、PHPのバージョン違いを考慮する必要なんかもあるので rbenv同様phpenvを入れておこうかと。ところが巷にあふれているphpenv(CHH/phpenv)はlibexecにまんまrbenv を突っ込んでいたりで、共存させるには*shrcで読ませる順番を気にしないといけないといった問題があった。 現状まだバージョンを変える必要はないけどPythonもちょっとだけ読み書きしているのでpyenvも同じように… ということを考えるとanyenvで管理するべきかなと思い至った。 rbenvは問題ないのだが、このphpenvが現状厄介なのでどうにかしてインストールまでこぎつける。

ざっくり作業メモ

homebrewで入れていた*env系をremoveしていく

1
2
3
4
  $ brew remove rbenv
  $ brew remove rbenv-gemset # gemset使う派です
  $ brew remove pyenv
  $ brew remove pyenb-virtualenv

anyenvインストール

1
2
3
4
5
  $ cd
  $ git clone https://github.com/riywo/anyenv ~/.anyenv
  $ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.zshrc
  $ echo 'eval "$(anyenv init -)"' >> ~/.zshrc
  $ exec $SHELL -l

*envインストール

1
2
3
4
5
  $ anyenv install rbenv
  $ cd .anyenv/envs/rbenv/plugins
  $ git clone git://github.com/jf/rbenv-gemset.git # 使う派でs
  $ cd
  $ anyenv install phpenv

Rubyインストール

そのまま引き継げるという話もあったけど、とりあえずこうやってまとめられるまでに試行錯誤が 発生していたのでまっさらにし直した。readlineのバージョンを下げる必要もないので、パッチを 充ててインストールする。Ruby 2.1.1 / 2.0.0をreadline 6.3の環境でもインストールするには - Qiita を参照してコマンドをコピペ。

1
  $ curl -sSL https://gist.github.com/mislav/a18b9d7f0dc5b9efc162.txt | env CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install --patch 2.1.1

PHPインストール

一応今回のメイン。どういう悶着があったのかわからないが通信がさっぱり出来ていなくて、よく見たら phpenv/php-ext/httpの中身がすっからかん。そらそうよ的なあれなんだがなぜこのままなのかよくわからない。 issueにあがっていたコメント通りにmasterからソースを戻す。

1
2
3
4
5
  $ cd .anyenv/envs/phpenv/php-ext/http
  $ git fetch
  $ git reset --hard origin/master
  $ cd ..
  $ git commit -am 'fix http'

一段落と思いきや、ここからもう少しだけ続く。ひと通り通してから気付いたが画像系とmemcache系がリンク出来なかったようだ

1
2
3
4
  $ phpenv install php-5.5.12
  (snip)
  configure: error: Can't find vpxc.h
  (snip)
  • vpxc.hがない
1
  $ brew install libvpx
  • xpm系がない

  • gd.hがない

1
  $ brew install gd
  • libmemcachedがない
1
  $ brew install libmemcached

このxxxがない、系は環境依存かもしれないけど、まあなんとかこれで押し通せた。 anyenvが採用しているphpenvはphp-buildを使わない書き方になっているらしいけど、その分の手間がどの程度かかるかで 使い勝手を選ぶような気がしている。まあなんというかPHPを使わなければそれにこしたことはない。