Edited at

dylib が見つからないから始まる PHP インストール地獄

brew あるものをインストールしたら、PHP が起動しなくなっちゃいました。そこから始まった PHP インストール地獄の話です。

環境は macOS Mojave 10.14.3 で、brew でインストールした PHP と、phpbrew で別バージョンを使えるようにしています。


ことの始まり

brew であるものをインストールしました。その際に homebrew を update したんですが、その後 php がエラーを吐いて起動しなくなっちゃいました。

$ php -v

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
Referenced from: /usr/local/bin/php
Reason: image not found
zsh: abort php -v

まずそれを修復しました。

参考: https://qiita.com/yasu_yyy/items/2f6a6b0bc562f082d999

$ brew update php


phpbrew で PHP 7.2 をインストール

これで、php のバージョンが最新版 (7.3.2) になって、エラーが出なくなりました。

開発中のシステムは 7.2 なので、phpbrew で 7.2 をインストールすることにします。

$ phpbrew install 7.2 +default +dbs


evp.h が見つからないエラー

configure でエラーが発生しています。

Error: Configure failed:

The last 5 lines in the log file:
checking for Kerberos support... no

checking whether to use system default cipher list instead of hardcoded value... no

checking for RAND_egd... no

checking for pkg-config... no

configure: error: Cannot find OpenSSL's <evp.h>

evp.h が見つからないということなので、openssl の場所を指定してやるといいようです。

参考: https://github.com/phpbrew/phpbrew/issues/646

$ phpbrew install 7.2 +default +dbs -- --with-openssl=/usr/local/opt/openssl

または

$ phpbrew install 7.2 +default +dbs +openssl=/usr/local/opt/openssl


BZip2 がないというエラー

Error: Configure failed:

The last 5 lines in the log file:
checking if the location of ZLIB install directory is defined... no

checking whether to enable bc style precision math functions... yes

checking for BZip2 support... yes

checking for BZip2 in default path... not found

configure: error: Please reinstall the BZip2 distribution

zlib2 は入っているんですよねぇ。

phpbrew のこちらの issueを参考にしてパラメータを加えます。わらしべ長者のようにだんだんオプションが増えていきます。


You can use brew --prefix bzip2 to get the path to bzip2 if you installed it with homebrew. Here's how I'm compiling PHP 7.1 on macOS 10.14:


$ phpbrew install 7.2 +default +dbs +openssl=/usr/local/opt/openssl +bz2="$(brew --prefix bzip2)"

参考: https://github.com/phpbrew/phpbrew/issues/966


cURL がない

Error: Configure failed:

The last 5 lines in the log file:
checking for cURL support... yes

configure: WARNING: Fallback: search for curl headers and curl-config

checking for cURL in default path... not found

configure: error: Please reinstall the libcurl distribution -

easy.h should be in <curl-dir>/include/curl/

これは単純に入ってなかったのでインストールすることにします。

$ brew install curl


libzip がない

Error: Configure failed:

The last 5 lines in the log file:
checking whether to enable zend-test extension... no

checking for zip archive read/writesupport... yes

checking pcre install prefix... /usr/local

checking libzip... no

checking for the location of zlib... configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located

最後のを頼りにして、BZip2 のときの issue を見直して、オプションを加えました。

$  phpbrew install 7.2 +default +dbs +openssl=/usr/local/opt/openssl +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)"

結果

===> phpbrew will now build 7.2.11

===> Loading and resolving variants...
:
:
:
To use the newly built PHP, try the line(s) below:

$ phpbrew use php-7.2.11

Or you can use switch command to switch your default php to php-7.2.11:

$ phpbrew switch php-7.2.11

Enjoy!

やっとインストールできました。

毎度毎度、とっても面倒くさい phpbrew 。開発環境はどんどん Docker に切り替えていきたいですね。


最終的なコマンドライン

iconv や xdebug 入れないとだったので、最終的には次のようになりました。

$ phpbrew install 7.2 +default +dbs +debug +openssl=/usr/local/opt/openssl +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)" +iconv="$(brew --prefix libiconv)"