PHP バージョン切り替えは phpenv だけじゃない! chphp の紹介
phpenv 使えない
phpenv に php-build を足しても phpenv install
が、エラーのためにインストール完了しない。
PHP インストール出来ない!
ここを参考にしつつ
エラーメッセージに対処していったのですが、解決法がわからないコンパイルエラーに遭遇し、
どんどんイヤになってきました。
phpenv 使っている人多いから、おそらく私の環境が悪いのだとは思いますが、数時間も悪戦苦闘したりPC環境を汚染したり神経使いたくない!
chphp 使おう
で、chphp というものを見つけました。
こっちは上手くいきましたので、これの説明をします。
1. 注意
まず、注意点。
homebrew からのインストールはやめましょう
brew install chphp
で chphp 入るから、これで大丈夫かと思いきや、
これには setup.sh が含まれていないために、 php-install コマンドを動かせるようになりません。
ちょっとしたハマりどころなので注意です。
Github の README に書かれているとおりにやっていきましょう。
2. chphp のインストール
wget -O chphp-0.0.1.tar.gz https://github.com/marcosdsanchez/chphp/archive/v0.0.1.tar.gz tar -xzvf chphp-0.0.1.tar.gz cd chphp-0.0.1/ sudo make install sudo ./scripts/setup.sh
まず公式に書かれている通り、この順でコマンドを実行すれば chphp のセットアップが完了します。
私の場合は「zlib がありませんよ〜」と途中にエラーメッセージが出て
setup.sh が完了しませんでしたので、エラーメッセージに書かれている通り
brew install homebrew/dupes/zlib
で zlib を入れて解決しました。
setup.sh の実行中、php-5.3.27 がインストールがなされ、
その後に php-5.4.21 のインストールがされようとする段階で、
>>> Successfully installed php 5.3.27 into /opt/php_versions/php-5.3.27 >>> Installing php 5.4.21 into /opt/php_versions/php-5.4.21 ... >>> Installing dependencies for php 5.4.21 ... Warning: curl-7.48.0 already installed Warning: freetype-2.6.3 already installed Warning: gettext-0.19.7 already installed Warning: gmp-6.1.0 already installed Warning: icu4c-56.1 already installed Warning: imap-uw-2007f already installed Warning: jpeg-8d already installed Warning: libpng-1.6.21 already installed Warning: libxml2-2.9.3 already installed Warning: openssl-1.0.2g already installed Warning: unixodbc-2.3.2_1 already installed Warning: homebrew/dupes/zlib-1.2.8 already installed >>> Downloading http://us2.php.net/get/php-5.4.21.tar.bz2/from/ar2.php.net/mirror into /usr/local/src ... --2016-03-31 18:27:24-- http://us2.php.net/get/php-5.4.21.tar.bz2/from/ar2.php.net/mirror Resolving us2.php.net... 64.71.164.5 Connecting to us2.php.net|64.71.164.5|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2016-03-31 18:27:25 ERROR 404: Not Found. !!! Download of http://us2.php.net/get/php-5.4.21.tar.bz2/from/ar2.php.net/mirror failed!
このようなエラーメッセージが出て終了してしまいましたが、
もしこれを見ている方が同じような表示を見たとしても、心配いりません。
ただ単純に php-5.4.21 がレポジトリに見つからなくてダウンロードできなかっただけです。
すでに php-5.3.27 は正常に /opt/php_versions ディレクトリ(もしくは ~/.php_versions ディレクトリ )に入ったはずですし、
php-install コマンドも動作するようになっているかと思います。
ためしに、2016/3/31 現在の 5.5系の安定版を入れてみます。
php-install php 5.5.33
とコマンドすると開始されます。
インストールはけっこう時間がかかります。
終了後に、
ls /opt/php_versions ls ~/.php_versions
3. chphp コマンドが動くようにする
ここまでではまだ chphp コマンドは動きません。
bash を使っている方(よくわからない方はたいていこっち)は ~/.bashrc 、
zsh を使っている方は ~/.zshrc に以下の1行を足す必要があります。
(私は zsh なので以降 .zshrc と書きます)
source /usr/local/share/chphp/chphp.sh
足したら、シェルを開き直すか source ~/.zshrc
で zshrc を再読み込み。
このように、
chphp
と打つと現在 php-install でインストールされたPHPのバージョン一覧が表示され、
chphp 5.5.33 ## chphp {バージョン番号}
とすることでバージョンを切り替え、
chphp system
と打てば、システム標準(chphpを入れる前)のバージョンに切り替えられます。
4. auto-switching 機能
違うプロジェクト(フォルダー)で違うバージョンのPHPを使いたい場合は多いことでしょう。
プロジェクトに cd コマンドで移動したときに自動で chphp を働かせる機能もあるようです。
動作させるにはまず .zshrc に source /usr/local/share/chphp/auto.sh
の一文を足します。
echo "source /usr/local/share/chphp/auto.sh" >> ~/.zshrc source ~/.zshrc
次に、プロジェクトのフォルダーに移動し、例えば php-5.5.33 に切り替えるようにしたいのなら、
echo "php-5.5.33" > .php-version
とコマンドして、『php-5.5.33』と書かれた .php-version ファイルを作ります。
auto-switching 機能が働いてる時、
.php-version ファイルが移動したフォルダにあると、chphp が裏で働いてくれ、PHPのバージョンがチェンジされます。
なお、このとき、逆に .php-version ファイルが自分自身もしくは親フォルダに置かれていないフォルダでは、システム標準の PHP バージョンが使われます。
chphp system
が裏で働く感じですね。
ですので、auto-switching 機能がすべての人に向いている機能ではない点にご注意ください。
5. ターミナル起動時のPHPバージョンを設定
ターミナル起動時に、chphp.sh により chphp system
と同様のことがなされ、
必ずシステム標準のPHPバージョンに戻ってしまいます。
残念ながら前回起動時のバージョンを引き継ぐことはできません。
もし、起動時に必ず php-5.5.33 でありたい場合は、
.zshrc の 3. で記載した『source /usr/local/share/chphp/chphp.sh』以降に『chphp 5.5.33』と記載するか、
もしくは、auto-switching 機能をONにしてる場合は、
echo "php-5.5.33" > ~/.php-version
のようにユーザーディレクトリに .php-version を用意することで解決できます。(ルートディレクトリのほうがいいのかも……?)
おわり
PHP に触れずに生きてきたのですが、
レンタルサーバでサイト構築するのをしなくてはならないので
PHP を覚え始めなくてはなりません。
CakePHP 使うの良さそう…?
lolipop の PHPバージョンが 5.5.25 だったので、それに合わせて開発していくために今回の記事となりました。
がんばります。
追記 (2017/02/10)
一年前は苦労して投げ出しましたが、現在は phpenv 使えています。
一筋縄にはいきませんでしたが、ここなどが参考になります。