【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が楽でいいというのを何処かで見たこともあり 使ったこともないのでこちらを試してみることに。
インストールには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のバージョンの切り替えができる。