今回、php-mime-mail-parser/php-mime-mail-parserでメールのパースを行いたく、peclのmailparseモジュールが必要になったので、折角なので最終版のphp7.4.27をインストールしました。
たまーにしか行わないビルド、その都度、色々調べることになるので(汗)備忘録としてまとめます。
Contents
phpenvのリストを更新
$ cd ~/.phpenv/plugins/php-build
$ git pull
Updating 09e8c54..fd7be5b
error: Your local changes to the following files would be overwritten by merge:
bin/phpenv-uninstall
Please, commit your changes or stash them before you can merge.
Aborting
php-buildの最新版をpullしてくるだけなんですが安定のエラー。
localのphpenv-uninstallが変更されてるっぽいですが捨ててもいいのですが、ひとまずstashして放置。
$ git stash
Saved working directory and index state WIP on master: 09e8c54 Add PHP 8.0.1, 7.4.14, 7.3.26 (#659)
HEAD is now at 09e8c54 Add PHP 8.0.1, 7.4.14, 7.3.26 (#659)
$ php-build $ git pull
......
create mode 100644 share/php-build/definitions/8.0.9
create mode 100644 share/php-build/definitions/8.1.0
create mode 100644 share/php-build/definitions/8.1.1
create mode 100644 share/php-build/definitions/8.1.2
create mode 100644 share/php-build/definitions/8.2snapshot
アップデートされました。
$ git stash apply
Auto-merging bin/phpenv-uninstall
CONFLICT (content): Merge conflict in bin/phpenv-uninstall
stashを一応、戻そうとおもったら安定のコンクフリクト。だよね。
<<<<<<< Updated upstream
IFS=$'\n' scripts=(`type phpenv-hooks >/dev/null 2>&1 && phpenv-hooks uninstall || true`)
=======
#IFS=$'\n' scripts=(`phpenv-hooks uninstall`)
>>>>>>> Stashed changes
発見。
$ git reset --hard
$ git stash drop
もちろんリモートを優先することにします。
スタッシュ前に戻し、スタッシュ内容は破棄し先に進めます。
phpenvでインストールしたいバージョンを選ぶ
$ phpenv install --list
最新のインストール可能なPHPのバージョンがリストアップされます。
デフォルトのビルドオプションを設定
$ vi ~/.phpenv/plugins/php-build/share/php-build/default_configure_options
--with-pgsql
--with-pdo-pgsql
よく忘れるpostgresモジュールのビルドもデフォルトで行うよう、オプションがなければ追加。
必要なパッケージをインストール
で、いつもビルドでこのあたりのビルドエラーがでます
No package 'openssl' found
configure: error: Please reinstall the BZip2 distribution
ので、必要そうなパッケージを予めインストールしておきます。
$ brew install autoconf bzip2 icu4c krb5 libedit libiconv libjpeg libpng libxml2 libzip oniguruma openssl@1.1
最後に、peclもオプションに追加してインストール
$ PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig" PHP_BUILD_CONFIGURE_OPTS="--with-bz2=/usr/local/opt/bzip2 --with-iconv=/usr/local/opt/libiconv --with-pear" PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4 phpenv install 7.4.27
phpの切り替え
$ phpenv versions
でインストールされたのを確認し、
$ phpenv global 7.4.27
もしくは、localオプションを利用して切り替えです。
最後にmailparse.so をインストール。
$ pecl install mailparse
....
configuration option "php_ini" is not set to php.ini location
You should add "extension=mailparse.so" to php.ini
メッセージ通り、
$ vi ~/.phpenv/versions/7.4.27/etc/php.ini
;最後に追記
extension=mailparse.so
などで、php.ini に extension=mailparse.so を追記します。
$ php -i | grep mailparse
mailparse
mailparse support => enabled
mailparse.def_charset => us-ascii => us-ascii
これで、mailparseが有効になりました。
$ composer require php-mime-mail-parser/php-mime-mail-parser
....
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing php-mime-mail-parser/php-mime-mail-parser (7.0.0): Extracting archive
無事、composerで7.0.0がインストールが出来ました。
このmailparseが無いと、composerがエラーでコケればいいんですが、
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing php-mime-mail-parser/php-mime-mail-parser (v1.0.0): Extracting archive
phpのバージョンによっては、v1.0.0 が入っちゃって、まったく使い物にならなかったり……
インストール出来ているものと思いこんで、沼にハマっていたのは秘密です^^