6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP7.3.8をインストールしようとしたらハマった話

Posted at

前提

こんなことをしようとした。

composer require facebook/webdriver

そしたらそもそもPHPが入っていなかったのでインストールしたら結構ハマったのでメモっとく。
ちなみにこんな感じのOS。

$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

手順

まずは、普通にインストールだ。
こんな感じにとってきて、

wget http://jp2.php.net/distributions/php-7.3.8.tar.gz

configureしてインストール!

'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
"$@"

さらっとpcre2とかを指定していますが、php7.3.0からはどうやらpcre2が要求されるようになった模様。
まあ、apacheとか動かさないから外のpcreが要るのかどうかちょっと怪しいけど、まあいいや。

で、いざcomposerでインストールしたら、

Problem 1
- facebook/webdriver 1.7.1 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- facebook/webdriver 1.7.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- Installation request for facebook/webdriver ^1.7 -> satisfiable by facebook/webdriver[1.7.0, 1.7.1].

libzipがないよ、って言われた。
「こんなのインストールすればいいじゃーん、簡単簡単」と思ったのが迷子の始まりでした。。。

yumでいれる

yum install libzip-devel

結論、こいつはダメ。
yumで入るのは、Ver.0.10系なのですが、そいつを指定してphpをconfigureすると、Ver.0.11以上を入れろと要求されます。
ま、まあ、yumで古いバージョンしか入らないのはいつものこと。
想定の範囲内です。

ソースから入れる

仕方ないので、ソースからインストールします。
ソースをもってきて、

wget https://libzip.org/download/libzip-1.5.2.tar.gz

解凍して、直下にあるINSTALL.mdを読んで・・・
oh... cmakeの3系以上を要求なさる。
しかたないので、

yum install cmake3
alias cmake=/usr/bin/cmake3

そして、cmakeする。

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip-1.5.2

通らない。。。。
cmakeコマンドが見つかりません。とか抜かす。
ああ、そうですかaliasでは不服でございますか。

unalias cmake
ln -s /usr/bin/cmake3 /usr/local/bin/cmake

シンボリックリンクにしたら通ったのでmakeしてinstall。
からの、phpのリビルド。

'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--enable-zip' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
'--with-libzip=/usr/local/libzip' \
"$@"

こんな感じで、enable-zipとwith-libzip=/usr/local/libzipでインストールしたlinzipの場所を指定。
そしたら、configureが通らない。。。
usefulなlinzipが見つからないのだそうな。
いや、指定したよね?
このオプションが見えないの??「--with-libzip=/usr/local/libzip」

ぐぐってみたらなんか見つけた。
https://magai.hateblo.jp/entry/2019/01/05/144422

ざっと読むと、「enable-zipするときはwithout-libzipをつけましょう」
????

あ…ありのまま 今 起こった事を話すぜ!
「zipをenableしたと思ったら いつの間にかwithoutしていた」
な… 何を言っているのか わからねーと思うが 
おれも 何をされたのか わからなかった…
頭がどうにかなりそうだった… 催眠術だとか超スピードだとか
そんなチャチなもんじゃあ 断じてねえ
もっと恐ろしいものの片鱗を 味わったぜ…

PHPのissueにはなってる模様
https://bugs.php.net/bug.php?id=76483#1529077184

PHP側にもこのように書かれています。
https://github.com/php/php-src/commit/c5df679ca8b1373e3f2a47aeba5b37da74f993de#diff-7748eb3bfdd3bf962553f6f9f2723c45

Zip: 
 . Building against the bundled libzip is discouraged, but still possible by
   adding `--without-libzip` to the configuration. 

PHP同梱のlibzipを使うのは推奨しません。使いたくばconfigure optionに--without-libzipつけろと。
じゃあ、同梱なんてするなよーーーー!!!
というか、俺は自分でインストールしたlibzipを使ってほしいんじゃ!

enable-zipつけずにインストールしたlibzipを指定してPHPをビルドしてもzipは使えるようにならんし、enbale-zipを付けるとwithout-libzipをつけねばならず同梱したlibzipが使われると。。。。
まあ、後のバージョンで修正されることを期待して、今回はbundleのzipライブラリを使おう。

'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--enable-zip' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
'--without-libzip' \
"$@"

これでmakeしてインストールしてphp -iで有効になりました。
当初の、

composer require facebook/webdriver

こいつも無事通った。

よくよく考えてみれば、あとからpearとかで入れるのが正解な気がしてきた。
まあ、composer使いたかっただけだから今回はこれでいいや。
でも、プロダクトで使うときはどうするんだろね。
もう少しconfigureをごちゃごちゃいじる必要がありそうだね。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?