Cloud9にphpenv（PHPのバージョン管理）を導入できるか試してみた

（2015/4/1現在のCloud9にて作業）

Cloud9は、Rubyであればデフォルトでrvmが入っているのでバージョン管理はそれでOK、ただ、PHPでもバージョン管理が出来ないかを試してみた。

[Ubuntu に phpenv を入れて複数バージョンのPHP管理しようとした](http://qiita.com/qurage/items/70f3341a18a5172288f7) や [CentOSにrbenvとphpenvをシステムワイドにインストール](http://qiita.com/ktaro/items/513ac42f1f4a2b30ffee) の記事を参考に挑戦。

結果、出来ましたが、穏やかでないこともしているので **自己責任** でお願いします。

## phpenvのインストール

ワークスペースの作成では、種類は「custom」にして作成。

最初に、インストール用のスクリプトファイルをダウンロードする。

```:console
$ cd
$ mkdir .installer-phpenv
$ cd .installer-phpenv/
$ wget https://raw.githubusercontent.com/CHH/phpenv/master/bin/phpenv-install.sh
```

そのスクリプトファイルを実行する。

```:console
$ chmod +x phpenv-install.sh
$ ./phpenv-install.sh

Installing phpenv in /home/ubuntu/.phpenv
Cloning into '/home/ubuntu/.phpenv'...
remote: Counting objects: 2052, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 2052 (delta 0), reused 0 (delta 0), pack-reused 2046
Receiving objects: 100% (2052/2052), 340.61 KiB | 255.00 KiB/s, done.
Resolving deltas: 100% (1272/1272), done.
Checking connectivity... done.
Success.
    ;;
*)
    ;;
esac

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

Add above line at the end of your ~/.bashrc and restart your shell to use phpenv.
```

`~/.bashrc`に`export`と`eval`の設定を追加するよう指示が出るので、viで開いて2行追加する。で、再読み込み。

```:console
$ vi ~/.bashrc
$ source ~/.bashrc
```

## php-buildのインストール

phpenvを使うことが前提なので、phpenvのプラグインとして導入する。

```:console
$ git clone git://github.com/CHH/php-build.git $HOME/.phpenv/plugins/php-build
```

`phpenv install`を実行し、インストールできるPHPのバージョンが一覧表示されればOK。

```:console
$ phpenv install

usage: phpenv install VERSION

Available versions:
 5.2.17
 5.3.10
 5.3.11
 5.3.12
  .
  .
  .
 5.6.5
 5.6.6
 5.6.7
 5.6snapshot
 master
```

## bison 2.7のインストール（と3.0のアンインストール）

PHPのどれかをインストールするのは、まだ先。引き続き、必要な作業をしていく。

どのバージョンのPHPを入れるにしてもbisonの特定のバージョンが必要になる。Cloud9ではデフォルトで3.0版のbisonがインストールされているが、これではOUT。

びっくりすることにCloud9では`apt-get`が利用できるので、3.0版のbisonをアンインストールし、2.7版のbisonをソースコードからインストールする。（元々インストールされているものをアンインストールするので、 **自己責任** でお願いします。）

### bison 2.7のダウンロード
```:console
$ mkdir .source-bison27
$ cd .source-bison27/
$ wget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
$ tar xvzf bison-2.7.tar.gz
$ cd bison-2.7/
$ ./configure
$ make
```

### bison 3.0のアンインストール
```:console
$ sudo apt-get remove bison
```

### bison 2.7のインストール
```:console
$ sudo make install
```

## 依存パッケージのインストール

他にも必要なパッケージがあるので、インストールしていく。

自分が行なったときにインストールしたパッケージは、下記のとおり。する必要のなかったものもあるかも…。（あと、libcurl関連は、ひとつずつインストールしないと上手くいかなかった。）

```:console
$ sudo apt-get update
$ sudo apt-get install libcurl3
$ sudo apt-get install libcurl4-gnutls-dev
$ sudo apt-get install libcurl4-nss-dev
$ sudo apt-get install libcurl4-openssl-dev
$ sudo apt-get install libmcrypt4 libmcrypt-dev libtidy-0.99-0 libtidy-dev libxslt1.1 libxslt1-dev apache2-dev
```

## apxs2の設定

PHPのインストールの際に`libphp5.so`というApache用のファイルを作成できるように、設定を追加する。`~/.phpenv/plugins/php-build/share/php-build/default_configure_options`をviで開き、次の1行の設定を、ファイルの一番下に追加する。

```:default_configure_options
--with-apxs2=/usr/bin/apxs2
```

## パーミッションの変更

以下のディレクトリのパーミッションを変更しないとPHPのインストール時にコケるので、`chmod`を実行する。また、デフォルトの`libphp5.so`を退避させておく。

```:console
$ sudo chmod oga+rw /usr/lib/apache2/modules
$ mv /usr/lib/apache2/modules/libphp5.so ~/.phpenv/versions/
$ sudo chmod oga+rw /etc/apache2/mods-available
```

## PHPのインストールを実行する

ここまでやって、ようやくPHPをインストールできる。リストの中からPHP5.6.7をインストールしてみる。

なお、フリープランだと恐ろしく時間がかかるので、覚悟する。（メモリが不足しているという警告が何度も出るが、それのせいでインストールがコケることは無かった。）

```:console
$ phpenv install 5.6.7

[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded pyrus Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.7 into /home/ubuntu/.phpenv/versions/5.6.7
[Skipping]: Already downloaded and extracted http://php.net/distributions/php-5.6.7.tar.bz2
[Preparing]: /tmp/php-build/source/5.6.7
[Compiling]: /tmp/php-build/source/5.6.7
[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar
[Pyrus]: Installing executable in /home/ubuntu/.phpenv/versions/5.6.7/bin/pyrus
[xdebug]: Installing version 2.3.2
[xdebug]: Compiling xdebug in /tmp/php-build/source/xdebug-2.3.2
[xdebug]: Installing xdebug configuration in /home/ubuntu/.phpenv/versions/5.6.7/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.6.7.20150401094243.log
[Success]: Built 5.6.7 successfully.
```

## インストールしたPHPを使えるようにする

```:console
$ phpenv global 5.6.7
$ phpenv rehash
```

これで`php -v`を実行すれば、5.6.7と出る。また、適当なPHPファイルをworkspaceの中に作成して、`phpinfo()`でも書いておいて、Apacheを起動すれば、問題なくPHPが動いていることが確認できるはず。

## 終わりに

結構大変で力尽きたので、当記事は、ここまでで。ここまで問題なければ、DBとの連携なども上手くいく、はず。試していないけど…。それは、また後で。

あと、ここまで使い倒すなら、有料プランへの乗り換えも考えた方が良いのかも。