anyenvでphpenv (+ php-builder) をインストールし、PHP7.1.6をインストールした際に大いにハマったのでのメモを残しておきます。
【注意】そのPHP環境、本当に必要?
PHPはサーバーサイドスクリプト言語で、サーバーやデータベースと密接に関係している言語です。MacのローカルにPHPを落としてきて、あなたのやりたいことができそうか、記事を読む前に是非ご確認ください!!
例えば何かフレームワークを利用してPHPのアプリケーションを開発したい場合、そのフレームワークの推奨するインストール方法に従えば、うまくセッティングされた形でPHPがついてくるかもしれません。二度手間を防ぐためにも、ぜひご確認ください!
また、筆者にPHP経験がほぼ無いため、非本質的なことをやっているかもしれません。ご承知おきください。
スペック
OS: macOS Sierra 10.12.4
anyenv: v0.0.4-dev
PHP: 7.1.6
anyenvとは
rbenvに代表される、プログラミング言語のバージョンをディレクトリで切り替えられる便利な環境たち(以下 **env と称します)を統合的に管理してくれる便利な環境です。
anyenvのインストール
anyenvのREADMEのインストール方法に従います。
git cloneして.bash_profileなどにパスを追加して初期化コマンドを書くだけ!\(^o^)/
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l
**envのアンインストール
さて、私はもともとpyenvとrbenvをインストールしていたので、これらをanyenvから扱わせるために一旦削除しました。
**env系を1つもインストールしていない方はスキップしてください。
基本的には以下の3つを各**envに対して行います。
brew uninstall **env
- .bash_profileなどから**envのパス追加&初期化コマンドを消す
rm -rf ~/.**env
phpenvのインストール
anyenvからphpenvをインストールします。
anyenv install phpenv
インストールが終わったら以下のコマンドを打ち、シェルを再起動しましょう。
exec $SHELL -l
php7.1.6のインストール
ここからが本番。
インストールコマンドは phpenv install 7.1.6
なので、まずコレが成功するか試してみましょう。多分どこかでエラーが出ると思いますが、万が一エラーが出なければこれでPHP7.1.6のインストールは完了です!やったね!!^^
以降はphpをインストールする際のエラーに対処していきます。
brewでopensslをインストール
PHPのインストールにはいろいろなソフトウェアが必要なようですが、それらはbrewでインストールできます。
大半の方はおそらくopensslのところで以下のようなエラーが出るのではないでしょうか。
configure: error: OpenSSL version 1.0.1 or greater required.
そこで、以下の手順を踏みます。
1. brewでopensslをアップグレード
brew upgrade openssl
でOKです。
opensslがbrewに入ってなければ brew install openssl
してみてください。
2. OSにbrewで入れたopensslを認識させる
インストール後、 openssl version
してみてください。バージョンは1.0.1以上になっているでしょうか?(たぶんなってないと思います)
which
コマンドを使って、opensslがどこにインストールされたものが使われているのか調べてみましょう。
$ which openssl
/usr/bin/openssl
/usr/bin/openssl
になっていますね。これはbrewでインストールしたopensslではないので、~/.bash_profile
などにパスを加えてbrewでインストールしたopensslが優先的に使われるようにしてみましょう。
※ 「phpenv brew openssl」 とかでぐぐると brew link openssl --force
が効かないという記事がたくさん出てくるとおり、 brew link
は効かないようです。
$ echo 'export PATH="/usr/local/Cellar/openssl/{インストールしたバージョン}/bin:$PATH"' >> ~./{お好きなシェルのprofileなど}
$ exec $SHELL -l
これで which openssl
して指定したパスが表示され、 openssl version
でインストールしたバージョンが表示されればとりあえずOKです。
brewでその他のソフトウェアをインストール
以下の記事を参考にして、私はlibxml2、mcrypt、autoconf、automake、bisonをbrewでインストールしました。
https://teratail.com/questions/51089
それから、私はautoconfがbrew list
には含まれていたので大丈夫だろうと思い、特にコマンドを打たなかったのですが、autoconfが有効化されておらず、phpのインストール時にエラーになりました。
brew link autoconf
で有効化しましょう。
phpenv install 7.1.6
時にopensslなどのパスを与える
さて、Macが最新のopensslを参照してくれるようになっても、phpenv install 7.1.6
しても同じところでエラーになるのではないでしょうか。どうやらこれはphp-buildに設定を書く必要があるようです。
2017年現在、php-buildはphpenvのインストール時にプラグインとして同時に入ってきます。このphp-buildがいろいろなバージョンのphpをビルドしてくれるのですが、これがbrewで入れた最新のopensslを見てくれていない、というのが原因のようです。
なのでphpenv install
コマンド実行時にパスが指定されるように、以下のファイルを編集します。
--with-openssl=/usr/local/opt/openssl
--with-mcrypt=/usr/local/opt/mcrypt
--with-libxml-dir=/usr/local/opt/libxml2
YACC=/usr/local/opt/bison/bin/bison
環境変数についてはこの記事も参考にしました。
http://qiita.com/Hiraku/items/33372d2c60b3ceb26e52
php-buildについては、以下の記事がとても詳しいので参考になると思います。
http://y-uti.hatenablog.jp/entry/2015/12/11/091058
php-buildのソースコードを編集する
最後に、php-buildのソースコードを編集します。
この記事のこのコメントに従い、該当コードを以下のように変更します(dev/nullを消す)。
{
$PREFIX/bin/phpize
"$(pwd)/configure" --with-php-config=$PREFIX/bin/php-config\
\
$configure_args
make
make install
} >&4 2>&1
これで完了です!!
再度 phpenv install 7.1.6
してみましょう!!
おわりに
いろいろググってみると先人たちもphpのインストールにとても苦労している印象を受けました(私も相当時間を持っていかれました…)。
なので最初に書いたように、macのローカルにPHP環境を直に構築する必要があるのか?他の方法でPHPをインストールしたほうがいいのではないか? を是非検討するとよいと思います!