msksgm’s blog

msksgm’s blog

Webエンジニアです.日々の勉強,読書,映画観賞,美術観賞の記録を載せます.

anyenv、phpenvでphpのインストール方法と、発生したエラー一覧

概要

anyenv と phpenv を使用して php 7.3.29 をインストールしたときにいくつかエラーが発生したので、インストール方法と解決方法をメモします。

インストール方法について

先に anyenv, phpenv を用いたインストール方法についてです。

インストール方法は2つあります。

  1. パッケージのインストールや環境変数の宣言をコマンドラインで実行する
  2. パッケージをインストールして PATH を設定ファイル(defaultconfigure_option と zshrc)に通す。(zshrc は不要かもしれません。)

それぞれ見ていきます。

1. パッケージのインストールや環境変数の宣言をコマンドラインで実行する

コマンド

php のビルドに必要なパッケージを全てインストールする

brew install \
  autoconf \
  automake \
  bison \
  bzip2 \
  curl \
  gettext \
  gmp \
  icu4c \
  jpeg \
  krb5 \
  imagemagick \
  libedit \
  libiconv \
  libmcrypt \
  libmemcached \
  libpng \
  libxml2 \
  libxslt \
  libzip \
  libtool \
  make \
  openssl \
  re2c \
  readline \
  tidy-html5 \
  zlib

設定ファイルの環境変数を宣言する

export PHP_BUILD_CONFIGURE_OPTS="\
  --disable-fpm \
  --disable-phpdbg \
  --enable-debug \
  --with-bz2=$(brew --prefix bzip2) \
  --with-curl=$(brew --prefix curl) \
  --with-gettext=$(brew --prefix gettext) \
  --with-gmp=$(brew --prefix gmp) \
  --with-iconv=$(brew --prefix libiconv) \
  --with-icu-dir=$(brew --prefix icu4c) \
  --with-jpeg-dir=$(brew --prefix jpeg) \
  --with-libedit=$(brew --prefix libedit) \
  --with-libxml-dir=$(brew --prefix libxml2) \
  --with-libzip=$(brew --prefix libzip)
  --with-mcrypt=$(brew --prefix libmcrypt) \
  --with-png-dir=$(brew --prefix libpng) \
  --with-readline=$(brew --prefix readline) \
  --with-tidy=$(brew --prefix tidy-html5) \
  --with-xsl=$(brew --prefix libxslt) \
  --with-zlib=$(brew --prefix zlib) \
  --with-kerberos"

インストールする

phpenv install 7.3.29

以上です

2. パッケージをインストールして PATH を設定ファイル(defaultconfigure_option と zshrc)に通す。(zshrc は不要かもしれません。)

コマンド

php に必要なパッケージをインストールして、環境変数を設定します。

export PHP_BUILD_CONFIGURE_OPTS="\
  --disable-fpm \
  --disable-phpdbg \
  --enable-debug \
  --with-bz2=$(brew --prefix bzip2) \
  --with-curl=$(brew --prefix curl) \
  --with-gettext=$(brew --prefix gettext) \
  --with-gmp=$(brew --prefix gmp) \
  --with-iconv=$(brew --prefix libiconv) \
  --with-icu-dir=$(brew --prefix icu4c) \
  --with-jpeg-dir=$(brew --prefix jpeg) \
  --with-libedit=$(brew --prefix libedit) \
  --with-libxml-dir=$(brew --prefix libxml2) \
  --with-libzip=$(brew --prefix libzip)
  --with-mcrypt=$(brew --prefix libmcrypt) \
  --with-png-dir=$(brew --prefix libpng) \
  --with-readline=$(brew --prefix readline) \
  --with-tidy=$(brew --prefix tidy-html5) \
  --with-xsl=$(brew --prefix libxslt) \
  --with-zlib=$(brew --prefix zlib)" \
  --with-kerberos
echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/bzip2/bin:$PATH"' >> ~/.zshrc
echo 'export LDFLAGS="-L/usr/local/opt/bzip2/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/usr/local/opt/bzip2/include"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/libiconv/bin:$PATH"' >> ~/.zshrc
echo 'LDFLAGS="-L/usr/local/opt/libiconv/lib"' >> ~/.zshrc
echo 'CPPFLAGS="-I/usr/local/opt/libiconv/include"' >> ~/.zshrc
echo 'export LDFLAGS="-L/usr/local/opt/libedit/lib"' >> ~/.zshrc
echo 'CPPFLAGS="-I/usr/local/opt/libedit/include"' >> ~/.zshrc
echo 'export PKG_CONFIG_PATH="/usr/local/opt/libedit/lib/pkgconfig"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

default_configure_options に追記

phpenv のビルドの設定をおこなう、default_configure_options を修正します。 # 以降は記述しないでください。

vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
--enable-sockets
--enable-exif
--with-zlib
--with-zlib-dir=/usr/local/opt/zlib # 修正箇所
--with-bz2=/usr/local/opt/bzip2 # 修正箇所
--enable-intl
--with-openssl
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug
--enable-fpm
--enable-bcmath
--enable-phpdbg
--with-iconv=/usr/local/opt/libiconv # 修正箇所
--with-libxml-dir=/usr/local/opt/libxml2 # 修正箇所

インストール

phpenv install 7.3.29

エラー一覧

phpenv をインストーするときに、ビルドエラーで順番に解決していったので、それぞれビルドエラーがどのパッケージに対応していたのかをみていきます。

エラー1

ビルドエラー1

-----------------
|  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 zlib
-----------------------------------------

解決方法1

configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: ).

bison のバージョンを確認します。

> bison --version
bison (GNU Bison) 3.8.1
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2021 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.

3.8.1 でした。なかったりバージョンがふるかったりしたら、brew install bisonでインストールします。

bison のパスを通します。

echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

re2c をインストールします。

brew install re2
configure: error: Cannot find zlib

zlib を確認します。 出力に zlib が表示されたらインストールされています。

ls /usr/local/opt | grep zlib
zlib # 出力

なので、phpenv の build ファイルに zlib の場所を指定させます。

vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
--enable-sockets
--enable-exif
--with-zlib
--with-zlib-dir=/usr/local/opt/zlib # ここを修正する
--with-bz2
--enable-intl
--with-openssl
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug
--enable-fpm
--enable-bcmath
--enable-phpdbg

エラー2

ビルドエラー2

今度は BZip2 のエラーです。

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall the BZip2 distribution
-----------------------------------------

解決策 2

bzip2 をインストールして、パスを通します。

brew install bzip2
echo 'export PATH="/usr/local/opt/bzip2/bin:$PATH"' >> ~/.zshrc
echo 'export LDFLAGS="-L/usr/local/opt/bzip2/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/usr/local/opt/bzip2/include"' >> ~/.zshrc
source ~/.zshrc

また、phpenv の build ファイルに bzip2 の場所を記述します。

vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
--enable-sockets
--enable-exif
--with-zlib
--with-zlib-dir=/usr/local/opt/zlib
--with-bz2=/usr/local/opt/bzip2 # ここを修正する
--enable-intl
--with-openssl
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug
--enable-fpm
--enable-bcmath
--enable-phpdbg

エラー3

ビルドエラー

iconv のエラーです

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please specify the install prefix of iconv with --with-iconv=<DIR>
-----------------------------------------

解決策3

libiconv をインストールします

brew install libiconv
echo 'export PATH="/usr/local/opt/libiconv/bin:$PATH"' >> ~/.zshrc
echo 'LDFLAGS="-L/usr/local/opt/libiconv/lib"' >> ~/.zshrc
echo 'CPPFLAGS="-I/usr/local/opt/libiconv/include"' >> ~/.zshrc
source ~/.zshrc

また、phpenv の build ファイルに libiconv の場所を記述します。

vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options
--enable-sockets
--enable-exif
--with-zlib
--with-zlib-dir=/usr/local/opt/zlib
--with-bz2=/usr/local/opt/bzip2
--enable-intl
--with-openssl
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug
--enable-fpm
--enable-bcmath
--enable-phpdbg
--with-iconv=/usr/local/opt/libiconv # この行を追記

エラー4

ビルドエラー4

libedit のエラーです。

> phpenv install 7.3.29

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall libedit - I cannot find readline.h
-----------------------------------------

解決策4

libedit をインストールします

brew install libedit
echo 'export LDFLAGS="-L/usr/local/opt/libedit/lib"' >> ~/.zshrc
echo 'CPPFLAGS="-I/usr/local/opt/libedit/include"' >> ~/.zshrc
echo 'export PKG_CONFIG_PATH="/usr/local/opt/libedit/lib/pkgconfig"' >> ~/.zshrc

エラー5

ビルドエラー5

libtidy のエラーです。

> phpenv install 7.3.29

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Cannot find libtidy
-----------------------------------------

解決策5

解決するには、tidy-html5 が必要です。

brew install tidy-html5

エラー6

ビルドエラー6

libzip のエラーです。

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

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall the libzip distribution
-----------------------------------------

解決策6

libzip をインストールします。

brew install libzip

エラー7

ビルドエラー7

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols

解決策7

わかりにくいですが、libxml2 をインストールします。

brew install libxml2
echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc
--enable-sockets
--enable-exif
--with-zlib
--with-zlib-dir=/usr/local/opt/zlib
--with-bz2=/usr/local/opt/bzip2
--enable-intl
--with-openssl
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug
--enable-fpm
--enable-bcmath
--enable-phpdbg
--with-iconv=/usr/local/opt/libiconv
--with-libxml-dir=/usr/local/opt/libxml2 # この行を追記

参考

qiita.com

qiita.com

qiita.com

gist.github.com