Macにanyenv, phpenv, php-builderでPHP7.1.6をインストールしたときのメモ

  • 2
    いいね
  • 0
    コメント

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に対して行います。

  1. brew uninstall **env
  2. .bash_profileなどから**envのパス追加&初期化コマンドを消す
  3. 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 コマンド実行時にパスが指定されるように、以下のファイルを編集します。

/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
--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を消す)。

 ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/extension/extension.sh

   {
       $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をインストールしたほうがいいのではないか? を是非検討するとよいと思います!