読者です 読者をやめる 読者になる 読者になる

uzullaがブログ

uzullaがブログです。

MacにあたらしめなPHPを簡単便利に入れる方法たくさん

年末だというのに所用でPHPをMacに簡単に入れる方法を沢山調べています。
個人的にはphpenv+php-buildつかってます。


本当に色んな方法が世の中にはあるのですが、今回のターゲットはphp5.5以降が入る方法だけです。cliで使いたいだけなので、方法によってはMysqlとの接続拡張があるとか無いとかあると思います。
テストはMavericksとLionの素の状態からやってます。


XAMPP for Mac

http://www.apachefriends.org/jp/xampp-macosx.html

定番ですが、現在だとPHP5.5.6が入ります。なんか他色々、いらない物もがさっと入ります。
ただ、完全に分離された領域にはいるので、既存環境は基本汚染されません。

俺はPHPだけしかいらないのですが、MysqlApacheはあっても悪くないですね。
ただ、XAMPPのphpバイナリは”-a”オプションのIntaractive Shellが利用できないのが、個人的にはめっちゃ不便です、仕様変わって欲しい。

事前にXcodeインストールなどは不要です。
インストーラーをダウンロードしてインストールすると入ります(そうです、最近インストーラーになりました)。

インストール後、phpコマンドは以下にはいりますので、

/Applications/XAMPP/bin/php

.bash_profile等に以下を適当に追記しましょう。

# pathを通すなり
export PATH="/Applications/XAMPP/bin/:$PATH"
# aliasをつくるなり
alias php="/Applications/XAMPP/bin/php"

他のインストール方法にも言える事なのですが、phpへpathを通すか、Aliasを定義するかは迷う所です。

Pathを通すと、PHP以外の一部コマンドもそちらを優先参照するようになるので、「他の所で」影響があるかもしれません。
aliasだと、pearやPyrusとかPeclpecl以外、もうめったにもうつかわないけど)を使う時にかならずフルパスで叩く必要があります。

どっちの方が既存に安全か(Mac標準でなくXAMPPの中にあるプログラムがうごいてしまって、問題がおこる)?というとaliasですが、変なハマりかたするのが嫌ならば、pathを通した方が良いですね。
いずれにせよ、.bash_profileの記述はいつでも変更できます。


アンインストールは、/Application/XAMPPを捨てて、追記を消すだけです。

php-osx.liip.ch が配布してるバイナリパッケージ

http://php-osx.liip.ch/

イマイチ使ったことがないので積極的にお勧めはしづらいですが、一番簡単でした。
Xcodeなども不要で、以下を実行するだけでインストールが完了します。
コードを見たかんじ、10.6のSnowleopardまではいけそうです(そこまでは検証してません)。

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5

ダウンロードすら不要な分、XAMPPよりも手間がありません。
何処に入るのかちょっとわかりづらいですが、Uninstallの項目をみるかぎり/usr/local/php5-*以下に入る模様です。そして/usr/local/php5にSymlinkが張られる模様。

PATHは通りませんので、~/.bash_profile等に /usr/local/php5/bin/php を XAMPPの章の最後を参考に適当にしましょう。


インストーラーのコードを確認したところ、`/usr/sbin/envvars`をいじって*1いるので、既存環境と相性があるかもしれません。


アンインストール方法がよくわからないのもこれをお勧めしづらい理由です。
すいません、普通にアンインストールの方法かいてありました。
コメントでの指摘大変有り難うございました> id:koriym さん


まず、Apacheのコンフィグに追記されるので、それを取り除きます
/etc/apache2/httpd.confに

LoadModule php5_module /usr/local/php5/libphp5.so

が「あれば消して」*2

LoadModule php5_module libexec/apache2/libphp5.so

を追記して、

あとは「/etc/apache2/other/」の「+php-osx.conf」と「+entropy-php.conf」 を消します。
(元ページには「also delete the file +php-osx.conf and +entropy-php.conf in /etc/apache2/other」とあるので上記書きましたが、インストーラーをバラしてpost-installスクリプトをみると、entropy-php.confは、php-osx.confのSymlink元っぽいのだが…?)


Apacheから削除ができれば、「/usr/local/php5-*」と「/usr/local/php5」を消すと、ファイル群は消えます*3


配布元のページにはかいてありませんが、前述した通り、場合によっては/usr/sbin/envvarsが修正されるので、それも戻す必要があります。
最後の方の「#added by php-osx」から「export DYLD_〜」までの三行を消します。


バージョンアップについては、なにも考えず上書き実行できそうです。
ただし、見た限り/usr/local/php5-*の古いものを消してはいないようなので、そちらは手で消す必要がありそうです。


特別にOS標準のApacheを使いたい!という理由があって、わかって使うならこれを使うのも良いかなとおもいますが、そういうケースを除いたらXAMPPなどの方が既存を触らない分安全かなと思います。


brew

http://brew.sh/index_ja.html
事前にXcodeとCommand Line Toolsを入れる必要があります。

XcodeはAppstoreから、Command Line ToolsはMavericksの前はXcodeの環境設定のダウンロードから、Mavericksはシェルで「xcode-select --install」を実行しましょう。

Brewは以下で入ります。

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

次は、Formulaを配布しているjosegonzalez/phpレポをtap(追加)しましょう
homebrew/dupesは「Error: No available formula for zli」というエラーがでるのでtapします。
その流れでbrew install php55でPHP5.5.xが入ります。

brew tap homebrew/dupes
brew tap josegonzalez/php
brew install php55

brew完了時にも出力されますが、以下を.bash_profile等に追記すると簡単便利にphpにパスが通ります。

export PATH="$(brew --prefix josegonzalez/php/php55)/bin:$PATH"

アンインストールは追記をけした上で、

brew remove php55

です、ただし、依存などは残るとおもいますので、完全に消えるわけではありません。(Brewの都合)

phpenv + phpbuild

!注意!
phpenvは自己責任で正しくつかいましょう。特に貴方がrbenvをつかうのであればです。
phpenvはrbenvをパッチで改変してラップして動作させているもので、中身はrbenvであり、rbenvと容易くコンフリクトします。

「はあ〜〜PHPとかいう駄目言語をちょっと便利にするために、美しいRuby言語の便利ツールであるrbenvに触れる事すら普通許されないのに、あまつさえいじるとかコンフリクトする可能性をつくって、ヘボが使ったら悪評がでちゃうような設計にするの、万死というか拷問に値するし、マジでありえない」みたいな至極健全な意見も散見されますし、まぁ、わりと俺もそう思ってる。

https://github.com/phpenv/phpenv というrbenvを下敷きにしてないものも世の中にはあるんですが、これ動かない事が多すぎて私は使っていません。(今ためしたけど、やっぱうごかなかった)

なにを気を付けるかといえば、一言でいって、rbenvとphpenvを差し込む順序が問題になるので、 phpenvを後で読み込むように注意する必要があります。

https://github.com/CHH/phpenv の「IMPORTANT NOTES」を読み、できれば実際のコードもよみ、さらにいえば、Rubyとかを書く人種なのに、なぜPHPをつかわなければならないのか、PHPをまず辞めるという手段はないのだろうか?生きるとは、生命とは、死とは、美とは、退廃とは、そして宇宙の始まり…!!
等などを胸に手をおいて一晩考えてからphpenvをいれましょう、一晩まってもphpenvはにげません。
!注意終わり!

事前にXcodeとCommand Line Toolsを入れる必要があります。Brewの項目をみてください 。

あと、ライブラリのインストールにもBrewをつかうのでまずbrewをいれます、こっちもBrewの項目をみてください 。

Brewがはいったら、phpenvをインストールします。

Brewで入れる場合はこちら

brew tap josegonzalez/php
brew install phpenv

手で入れる場合はこちら

$ git clone https://github.com/CHH/phpenv ~/phpenv
$ bash ~/phpenv/bin/phpenv-install.sh
$ rm -fR ~/phpenv

どちらでやってもいずれにしても~/.phpenvに入るので、 .bash_profileの最終行に以下を追加

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

phpenvをいれたら、phpをビルドするツールphp-buildをインストールします。

php-buildもbrewでもインストールできますが、
・phpenvのプラグインとしてはいらないので、使い方が面倒
・definition(定義)が古いので、5.5.7とかがない(HEAD指定すればいいかもだけど…)
のでやめたほうがよいですね。
以下のようにしてインストールします。

$ mkdir ~/.phpenv/plugins
$ git clone https://github.com/CHH/php-build ~/.phpenv/plugins/php-build
$ phpenv install -l
usage: phpenv install VERSION

Available versions:
5.2.17
(略、ビルドできるバージョンが大量に出てくる、
 一番下が一番新しいというわけではないので注意、数字を見ましょう)

早速ビルドしたいですが、その前に依存ライブラリを入れるます。
無駄をやらないためにはエラーが出たら、順次やる心構えでよいですが、面倒なら全部いれしまえ。
ただ、autoconfは入っていないときのエラーが絶望的にわかりづらいので、とりあえず入れて置いた方が良いですね。

$ brew install autoconf
$ brew install re2c
$ brew install jpeg
$ brew install libpng
$ brew install libmcrypt
$ brew install bison //ここは下記参照

残念ながらbisonで今現在問題があります。OSXに搭載されたbisonは2.3で、今のBrewで入るのは3.0.2。そして、PHPは2.4〜2.7のbisonでないとビルドができない、非常に間が悪い状態になっています。

以前はbrew versionsという風に指定して、ゴチャゴチャやると、過去のバージョンのbisonを入れることができましたが、今日ためしたら非推奨と言われたので今後つかえなくなりそう。そのあたりはこちらのエントリを見てください http://uzulla.hateblo.jp/entry/2013/12/29/165752

とりあえず、Formulaを用意したので(本家にもなげたので、マージされればよいな!)、以下で2.7を入れる事ができます。

curl https://raw.github.com/uzulla/homebrew-versions/bison27/bison27.rb > ~/bison27.rb
brew install ~/bison27.rb
rm ~/bison27.rb

※このときにJavaランタイムをいれるか?ときかれるかもしれないが、入れなくてかまわない。入れても良いけど。

その後、~/.phpenv/plugins/php-build/share/php-build/default_configure_options の一行目に*4

YACC=/usr/local/opt/bison27/bin/bison

を追加する事で入れたbison2.7を使ったビルドができるようになります。
(上はphp-buildが参照するので、なにか他のバージョンのビルドで問題があれば、外したりかえたりしてください)

ではやっとビルドです。

$ phpenv install 5.5.7
PHPのビルド、時間がかかります)
(「The Log File is not empty,〜」などといわれますが、大体の場合問題はない)
$ phpenv global 5.5.7
$ php -v
PHP 5.5.7 (cli) (built: Dec 17 2013 04:21:20)

phpenvはパスを通したりする必要はありません。

アンインストールは記述を消して.phpenvを消すだけです。
一部のビルドしたバージョンだけ消したい場合には.php/versions/の指定のバージョン番号のディレクトリを消しましょう。

どれも共通で、php.iniの場所について

php --ini

で探す事ができます(id:koriym さんコメントで指摘有り難うございます)

まとめ

まあ色々な入れ方があるんですけど、やっぱ判る人はphpenv+php-buildが一番いいとおもいます。最新バージョンいれ放題だし、変え放題だし、問題あればもどせるし。

初心者なら、やっぱりXAMPPは良いのではないですかね、なんかぶっ壊れても消して入れ直すだけだし。バージョンアップも差し替えるだけだし。

というか、後でバージョンをあげるのが他の方法はケッコーだるい。

Brewはわりと簡単にできそうですけど、パッケージでファイルがざっくり消えて、ざっくりはいるるみたいなの、なにがおこるのかよくわからないのと、php56になったらどうなんの?って所もあって軽い不安感はあります。

php-osx.liip.chについてはまったくしらなかったダークホースなので、詳しいこと知っている人がいたら、是非おしえてください。
ここまで簡単便利は他にないですけど、アンインストールとかバージョンアップのことあんま考えられてないっぽいので…。
アンインストール方法普通にかいてありました。見落としておりました、すみません。かさねて指摘有り難うございます > id:koriym さん
バージョンアップの方法も、コードバラしたらなんとなくわかりました(上の方に追記)ただ、詳しく見てみても、DYLD_LIBRARY_PATHいじってるのと、綺麗なアンインストールが多少面倒なので、あんまりおすすめしません。

*1:DYLD_LIBRARY_PATHを書き換えている。既存Apacheの環境をいじる為だとおもうが、これは影響でないのかな…。

*2:最新版コードを読む限り、無い場合があるっぽい

*3:上の前にこれをやると、Apacheがあがらなくなると思います

*4:なんで「default_configure_options」なのか、definitionsにconfigure_option追加すればいいじゃないかというご意見。まあそうなんですけど、5.4〜5.5は大体全部この問題があって、デフォルトにしないと面倒…