コンテンツにスキップするには Enter キーを押してください

phpenvを使って最新版PHPを利用する

清家です。

PHP7.3楽しみですよね!
RC版を試したい、って時に便利なphpenvをanyenv経由で利用する方法と
追加の情報を書こうと思います。
利用OSはAmazon Linux2です。

anyenv

anyenvは知ってる方多いのでは無いでしょうか?
様々な言語の色々なバージョンを利用できるように管理してくれるツールです。
gitでインストールします。

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ vim ~/.bash_profile ※bash利用時

最後に以下を追記

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
$ source ~/.bash_profile ※bash利用時
$ anyenv install phpenv

〜省略〜

Install phpenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

$ exec $SHELL -l

インストール出来るバージョン確認

$ phpenv install -l

〜省略〜

  7.2.12
  7.2snapshot
  7.3.0alpha1
  7.3.0alpha2
  7.3.0alpha3
  7.3.0alpha4
  7.3.0beta1
  7.3.0beta2
  7.3.0beta3
  7.3.0RC1
  7.3.0RC2
  7.3.0RC3
  7.3.0RC4
  7.3.0RC5
  7.3snapshot
  master

この記事を書いてる時点で7.3.0RC6が出てるはずなので、微妙に遅れているようですね。

早速インストールしたいのですが、デフォルトではCPUを一つしか使用せず時間がかかります。
CPUパワーをフルに発揮する用に設定を追加します。

PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j8

j8の部分は使用しているPCのマシンコア数に合わせて調整してください。
上記だと8CPU利用します。

早速インストールしますが、わりといろんなものが足りないことが多いです。

$ phpenv install 7.3.0RC5

〜省略〜

-----------------
|  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: none, min: 204, excluded: ).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: libxml2 not found. Please check your libxml2 installation.
-----------------------------------------

Amazon Linux2の場合、
わりと雑に言うとXxxxX not foundのXxxxX-develを入れれば解決します。
上記だとlibxml2-develを入れれば良いです。 ※libXxxxX-develの場合も有り

gcc-c++ちょっと特殊ですが、エラーメッセージから該当パッケージを探します。

以下コマンドで該当のパッケージを探します。

sudo yum search XxxxX

またAmazon Linux2ではlibtidyが見つかりません。
makeすれば良いんですが、なんとか Y/nな感じで終わらせたいので、
amazon-linux-extrasを使ってepelを有効化します。

$ amazon-linux-extras
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2 ]
 11  vim                      available    [ =8.0 ]
 12  golang1.9                available    [ =1.9.2 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11 ]
 16  php7.1                   available    [ =7.1.22 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker                   available    \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29 ]
 23  tomcat8.5                available    [ =8.5.31  =8.5.32 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192 ]

$ amazon-linux-extras install epel

上記を繰り返すと以下のパッケージを入れれば良いことがわかります。

sudo yum install libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-turbo-devel libpng-devel libicu-devel gcc-c++ readline-devel libtidy-devel libxslt-devel libzip-devel libzip-devel
$ phpenv install 7.3.0RC5
$ phpenv install 7.3.0RC5
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.3.0RC5 into /home/vagrant/.anyenv/envs/phpenv/versions/7.3.0RC5
[Skipping]: Already downloaded and extracted https://downloads.php.net/~cmb/php-7.3.0RC5.tar.bz2
[Preparing]: /tmp/php-build/source/7.3.0RC5
[Compiling]: /tmp/php-build/source/7.3.0RC5
[Info]: Enabling Opcache...
[Info]: Done
[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.0RC5.20181125232025.log or rebuild with '--verbose' option
[Success]: Built 7.3.0RC5 successfully.

warningがでてるようですがインストール出来ました。
最後に7.3.0RC5を使う宣言をして利用できます。

$ phpenv global 7.3.0RC5

わりと色んな物が入ってないので、configure_optionを変更したくなると思います。

全てのPHPに反映したいconfigure_optionはdefault_configure_optionsに書きます。

$ vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/default_configure_options

以下の用に追記

--with-mysql
--with-pdo-mysql

個別のPHPに反映したいconfigure_optionはdefinitionsに書きます。

$ vim ~/.anyenv/envs/phpenv/plugins/php-build/share/php-build/definitions/7.3.0RC5

以下の用に追記

configure_option "--with-mysql" "--with-pdo-mysql"

これで様々なPHPで検証出来るようになりますね!

Company:Fusic CO., LTD. 

Slides:slide.seike460.com

blog:seike460.hatenablog.com

Program Language:PHP , Go , Elixir

infrastructure:Server , Network , infrastructure as code

Frontend:Vue.js

Interest:Full Serverless Architecture

コメントする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です