旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【php】 複数のPHPバージョンを管理するphpbrew

仕事でPHPを使う事があって、CentOS6の環境にPHPをインストールしたら

$ php -v
PHP 5.3.3 (cli) (built: May  7 2012 20:13:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

...古いですね。

ということでバージョンを上げる作業にかかろうと思ったのですが、実はこの環境 幾つかシステムを入れるor既に入っていてPHPのバージョンを上げての動作確認がされていないものもある。

開発環境とはいえ、さすがに動かなくなっては不憫だし それだけの為にいくつもVirtualBoxを複製するのもナンセンスだと思ったので PHPのバージョン管理ツールを導入してみることにした。

有名所だとphpenvとかになるんだけど、今回はphpbrewが楽でいいというのを何処かで見たこともあり 使ったこともないのでこちらを試してみることに。

c9s/phpbrew - GitHub

phpbrew

インストールにはGitHubのReadmeを見るのが一番はやいのですが、うまくインストールできない部分があったので以下手順です。

Readmeに書いてある通りにインストールしようとすると以下のようになってしまった。

$ curl -O https://raw.github.com/c9s/phpbrew/master/phpbrew
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0

ということで、curlは一旦やめてwgetにするが、証明書のエラーで落ちてしまう。

$ wget https://raw.github.com/c9s/phpbrew/master/phpbrew
--yyyy-mm-dd hh:mm:ss--  https://raw.github.com/c9s/phpbrew/master/phpbrew
Resolving raw.github.com... 103.245.222.133
Connecting to raw.github.com|103.245.222.133|:443... connected.
ERROR: certificate common name `www.github.com' doesn't match requested host name `raw.github.com'.
To connect to raw.github.com insecurely, use `--no-check-certificate’.

日本語だとこんな感じ。

$ wget https://raw.github.com/c9s/phpbrew/master/phpbrew
--yyyy-mm-dd hh:mm:ss--  https://raw.github.com/c9s/phpbrew/master/phpbrew
raw.github.com をDNSに問いあわせています... 103.245.222.133
raw.github.com|103.245.222.133|:443 に接続しています... 接続しました。
エラー: 証明書に記載されている名前 `www.github.com' とホスト名 `raw.github.com' が一致しません
raw.github.com に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。

ということでエラーにもあるように「--no-check-certificate」をオプションに指定する。

wget --no-check-certificate https://raw.github.com/c9s/phpbrew/master/phpbrew

これで無事DLできました。

初っ端からコケるとは思いもせず。

「--no-check-certificate」を付けてもエラーが出る場合はhttpsをhttpにしちゃいましょう。

wget http://raw.github.com/c9s/phpbrew/master/phpbrew

これでもまだダメな場合、本家にDLあるのでFTPなりSambaなりでサーバに持っていきましょう。

続き...

phpbrewに実行権を与えて/usr/bin配下に設置します。

$ chmod +x phpbrew
$ cp phpbrew /usr/bin/phpbrew

初期設定コマンド

$ phpbrew init

起動時に設定ファイルを読み込むように.bashrcにコマンドを追記します。

source ~/.phpbrew/bashrc

これである程度の設定は完了

インストールできるPHPのバージョンを確認する場合

$ phpbrew known

ここでこんなエラーが出る事があります。

PHP Fatal error:  Class 'DOMDocument' not found in phar:///usr/bin/phpbrew/PhpBrew/PhpSource.php on line 2

Fatal error: Class 'DOMDocument' not found in phar:///usr/bin/phpbrew/PhpBrew/PhpSource.php on line 2

これはphp-xmlがインストールされていない為なので、yumなりでインストールしてください。

エラーが出ない場合は以下のようにPHPのバージョンが表示されます。

$ phpbrew known
Available stable versions:
  5.5 versions:    5.5.12, 5.5.11, 5.5.10, 5.5.9, 5.5.8, 5.5.7, 5.5.6, 5.5.5
  5.4 versions:    5.4.28, 5.4.27, 5.4.26, 5.4.25, 5.4.24, 5.4.23, 5.4.22, 5.4.21
  5.3 versions:    5.3.28, 5.3.27, 5.3.26, 5.3.25, 5.3.24, 5.3.23, 5.3.22, 5.3.21

これで無事phpbrewが使えるようになった。

phpbrew known で表示されているPHPのバージョンをインストールするときは

$ phpbrew install 5.4.28

これにconfigオプションを指定する場合は +defaultを加えてあげると良い。

$ phpbrew install 5.4.28 +detault

configオプション(variants)の詳細を見たい場合

$ phpbrew variants
Variants:
  all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, curl, dba, debug, dom,
  embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, hash, iconv,
  icu, imap, intl, ipc, ipv6, json, kerberos, mbregex, mbstring, mcrypt,
  mhash, mysql, opcache, openssl, pcntl, pcre, pdo, pgsql, phar, posix,
  readline, session, soap, sockets, sqlite, tidy, tokenizer, wddx, xml,
  xml_all, xmlrpc, zip, zlib


Virtual variants:
  dbs: sqlite, mysql, pgsql, pdo
  mb: mbstring, mbregex
  default: bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc,
  json, mbregex, mbstring, mhash, mcrypt, pcntl, pcre, pdo, phar, posix,
  readline, sockets, tokenizer, xml, curl, zip, bz2


Using variants to build PHP:

  phpbrew install php-5.3.10 +default
  phpbrew install php-5.3.10 +mysql +pdo
  phpbrew install php-5.3.10 +mysql +pdo +apxs2
  phpbrew install php-5.3.10 +mysql +pdo +apxs2=/usr/bin/apxs2

「+default」とした時は

  default: bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc,
  json, mbregex, mbstring, mhash, mcrypt, pcntl, pcre, pdo, phar, posix,
  readline, sockets, tokenizer, xml, curl, zip, bz2

上記が指定される。

次にインストール後PHPの切り替えの仕方

一時的にPHPのバージョンを変えたい場合

$ phpbrew use 5.4.28

「use」で指定した場合、再起動した時には設定されているPHPのバージョンへ戻るので、一時的に切り替えたい時に使う。 再起動してもバージョンを変えたくない場合は「switch」を使う。

$ phpbrew switch 5.4.28

これでPHPのバージョンの切り替えができる。