LoginSignup
14
8

More than 5 years have passed since last update.

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

Posted at

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

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8