ゴンの気まぐれなるままに
Mac環境

phpenvでphp7系をインストール

phpenvでphpをインストール

phpenvを使ってphp7.3をインストールしてみる。

phpenvをそのままインストールしたいが、バージョン管理をするバージョン管理ソフトのanyenvでインストールを先に行います。

動作環境

動作確認をした環境は下記の通りになります。

OSmacOS Mojave
CPU3.6 GHz Intel Core i9
メモリ16GB

phpenvのインストール

phpenvがインストールされていない場合は、anyenvからインストールします。

なぜanyenvをインストールするかというと、brewでphpenvを入れると古い場合が多いです。

さらにアップデートしようとしても最新にならず、一度アンインストールを行わないと最新にならないことが多かったためです。

anyenvのインストールができている場合は、下記のコマンドを打ってください。

$ anyenv install phpenv
$ exec $SHELL -l

PHPのインストールリストの確認

PHPでインストール出来るリストを確認(2019年5月時点)します。

$ phpenv install --list
Available versions:
・・・ 省略
  7.2.0
  7.2.10
  7.2.11
  7.2.12
  7.2.13
  7.2.14
  7.2.15
  7.2.16
  7.2.17
  7.2.18
  7.2.1
  7.2.2
  7.2.3
  7.2.4
  7.2.5
  7.2.6
  7.2.7
  7.2.8
  7.2.9
  7.2snapshot
  7.3.0
  7.3.1
  7.3.2
  7.3.3
  7.3.4
  7.3.5
  7.3snapshot
  7.4snapshot
  master

PHPインストール

PHPのインストールできるバージョンが確認できたので、phpenvを使ってインストールを行います。

$ phpenv install 

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: ).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: Cannot find OpenSSL's <evp.h>
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526002254.log'.

エラーが出てしまいました。

OpenSSLが無いよってことでbrewでインストールします。

OpenSSLインストール

$ brew install openssl

Warning: openssl 1.0.2r is already installed and up-to-date
To reinstall 1.0.2r, run `brew reinstall openssl`

Warningがでていて、brew reinstall opensslを実行してと促されているので実行します。

そしてもう一度phpenvでインストールしてみます。

$ brew reinstall openssl
$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
$ exec $SHELL -l
$ phpenv install 7.3.5

あエラーが先ほどの内容と同じでログしっかりと見ないとダメだなと思いました。

ログを確認するとbisonのサポートがダメみたいなので、bisonをPHP対応のversionに変更してみます。

bisonのインストール

$ brew install bison

==> Downloading https://homebrew.bintray.com/bottles/bison-3.4.1.mojave.bottle.t
==> Downloading from https://akamai.bintray.com/96/96565e8ced7e49173e86a6971a71a
######################################################################## 100.0%
==> Pouring bison-3.4.1.mojave.bottle.tar.gz
==> Caveats
bison is keg-only, which means it was not symlinked into /usr/local,
because some formulae require a newer version of bison.

If you need to have bison first in your PATH run:
  echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile

For compilers to find bison you may need to set:
  export LDFLAGS="-L/usr/local/opt/bison/lib"

==> Summary
?  /usr/local/Cellar/bison/3.4.1: 85 files, 2.6MB

bisonの設定

$ echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
$ exec $SHELL -l

確認するとバージョンが変わりませんでした。

調べると下記のコマンドでいけました。

$ brew link bison --force

再度バージョン確認すると差し代わったのを確認できます。

$ bison --version
bison (GNU Bison) 3.4.1
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

そして再度、phpenvでphpのインストール試みます。

$ bison --version
bison (GNU Bison) 3.4.1
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: Cannot find OpenSSL's 

インストールができませんでした。

取り合えず、WarningとErrorを潰していきます。

re2c

「WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.」と出ていたので、re2cのインストールを行います。

$ brew install re2c

無事インストールが確認できたので、再度phpのインストールを試みます。

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Cannot find OpenSSL's 
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526005055.log'.
[Warn]: Aborting build.

あとはOpenSSLのみと思いきや、ログを確認するとまだ足りていませんでした。

env.hが足りない

libxml2で利用しているみたいで、インストールします。

$ brew install libxml2

インストールが完了したので、再度phpのインストールを試みます。

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: Fallback: search for curl headers and curl-config
configure: error: jpeglib.h not found.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526010055.log'.

エラー内容が変わりました。

libjpegのインストール

jpeglibと出ていたのですが、ライブラリで思い当たるのはlibjpegなのでインストールしてみます。

$ brew install libjepg

インストールが完了し、再度phpをインストールしてみます。

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: Fallback: search for curl headers and curl-config
configure: error: png.h not found.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526010315.log'.

エラー内容が変わりました。

libpngをインストール

今度はpng.hですね。

png.hってことは、libpngだろうと思います。

libpngをインストールしてみます。

$ brew install libpng

無事にインストールが完了したので、再度phpをインストールします。

$ phpenv install 7.3.5

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: Fallback: search for curl headers and curl-config
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526010540.log'.

まだエラー出ますね。

icu4cのインストール

ICUって何?

curl-configとか出ているけど、謎なので調べます。

調べるとicu4cを入れると大丈夫みたいです。

$ brew install icu4c
$ echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

そろそろインストールできて欲しいと願いつつ、phpのインストールを実行します。

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: Fallback: search for curl headers and curl-config
configure: error: Please reinstall the libzip distribution
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526010902.log'.

まだ終わらないですね。

libzipのインストール

今度はlibzipのインストールを行います。

$ brew install libzip

インストールが完了したので、これで終わってくれ!と再度phpのインストール。

$ phpenv install 7.3.5
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/signal.h:106:48: note: insert '_Nullable' if the pointer may be null
int     sigvec(int, struct sigvec *, struct sigvec *);
                                                   ^
                                                    _Nullable
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/signal.h:106:48: note: insert '_Nonnull' if the pointer should never be null
int     sigvec(int, struct sigvec *, struct sigvec *);
                                                   ^
                                                    _Nonnull
211 warnings generated.
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.3.5.20190526011204.log'.

何このエラー。Mac側の問題じゃね?

気持ち悪いのでこのエラーも対応する。

autoconfのインストール

調べるとautoconfあたりが原因の様だったのでインストールしてみます。

 
$ brew install autoconf

インストールが出来たので、再度phpをインストールします。

$ phpenv install 7.3.5

[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.3.5.20190526100649.log or rebuild with '--verbose' option
[Success]: Built 7.3.5 successfully.

Successfullyが出ているのでやっとPHPのインストールが出来ました。

しかし、ログにはWarningが吐かれています。

まとめ

PHPのインストールは完了しました。

しかし最後に出ていたログについて調べたけど、よくわかりませんでした。

さらに調査してみたけど、他の人も解決できていないっぽいので終了にします。

毎度のようにPHPのインストールするのが手間なんだけど、Dockerで管理した方が良くない?って思いました。

phpenv使わないでDockerでphp使った方が楽ですよ。