絖綛 N@i.jp  昨日:00035969
 今日:00023394
 総計:00081762
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:04/16 19:55


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

PHP 7.4.1に移行してみた

今のところ問題ない様子


 このWebサーバは、昨年1月に大苦労してPHP 5.6からPHP 7系へ移行したのだけど、その時からPHP 7.3.xxを使ってきた。その間に PHP開発のメインストリームは7.4に移り昨年末に 7.4.0がリリースとなったのだけど、実はウチのMac Mini G4(Mac OS X 10.4.11 Tiger)でビルドすると途中でコケるのだった。mmap()が Illegal argumentを起こしていたので、原因を調べるのも面倒だし、このままPHP 7.3系を使い続けりゃいいかぁとも思ったのだけど、年末年始休みの時間ができた時にチャレンジしたところ何とか突破できたので、その備忘録。

1. 事前準備

 今までPHPにバンドルされていたが、PHP 7.4からはバンドルされなくなったとかで、以下のものを事前にインストールしておく必要があった。

  • Oniguruma
    マルチバイト文字を正規表現で扱うためのライブラリ。現時点での最新版は Ver.6.9.4
  • libiodbc
    ODBC互換データベースに対する API。データベースの種類を意識することなく、共通APIでアクセスできるようにするものらしい(良くわかってない^^;)。現時点での最新版は Ver.3.5.13 のようなのだけど、ダウンロードできたのは Ver.3.5.12 だった。

1.1 Oniguruma Ver.6.9.4のインストール

 ダウンロードした onig-6.9.4.tar.gz を解凍して普通にビルドするだけ。

$ tar xzf onig-6.9.4.tar.gz
$ cd onig-6.9.4
$ ./configure CFLAGS="-O2"
$ make
$ make check
$ sudo make install

1.2 libiodbc Ver.3.52.12のインストール

 こちらもダウンロードした libiodbc-3.52.12.tar.gz を解凍して普通にビルドするだけ。

$ tar xzf libiodbc-3.52.12.tar.gz
$ cd libiodbc-3.52.12
$ ./configure CFLAGS="-O2"
$ make
$ make check
$ sudo make install

2. PHP 7.4.1のインストール

2.1 ソースプログラム修正

 ウチの MacOS X で mmap()が Illegal argument になる問題を修正する。修正するのは "Zend/zend_alloc.c"の1つだけ。修正個所は、114行めからの以下の部分。

#ifndef __APPLE__
# define ZEND_MM_FD -1
#else
/* Mac allows to track anonymous page via vmmap per TAG id.
 * user land applications are allowed to take from 240 to 255.
 */
# define ZEND_MM_FD (250<<24)
#endif

  ↓

//#ifndef __APPLE__
# define ZEND_MM_FD -1
//#else
/* Mac allows to track anonymous page via vmmap per TAG id.
 * user land applications are allowed to take from 240 to 255.
 */
//# define ZEND_MM_FD (250<<24)
//#endif

 ZEND_MM_FDは mmap()の第5引数のファイルディスクリプタに指定されている。ファイルディスクリプタが -1 の場合はメモリ空間にファイルをマッピングするのではなく、単にメモリ領域を獲得することになるはずなのだが、最近の macOSでは何やら特別なメモリページを獲得するようにしているっぽい。ウチのような古い Mac OS X の場合は -1 にすれば良いはず。

2.2 ビルドスクリプト

 指定するオプションが多く今後何度も使うことになるので、ビルドスクリプト"build.sh"を作成しておく。ビルドスクリプトは以下。

#!/bin/bash -x

export MACOSX_DEPLOYMENT_TARGET=10.4
export GCC="/usr/local"
export SSL="/usr/local/libressl"
export PATH="${GCC}/bin:/usr/local/bin:/usr/bin:${PATH}"
export DYLD_LIBRARY_PATH="${SSL}/lib:${GCC}/lib:${DYLD_LIBRARY_PATH}"
export PKG_CONFIG_PATH="${SSL}/lib/pkgconfig:${PKG_CONFIG_PATH}"
export OPTFLAGS="-O2"
export CFLAGS="${OPTFLAGS} -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}"
export PREFIX="/usr/local/php7"

./configure \
    --prefix=${PREFIX} \
    --with-apxs2="/usr/local/apache2/bin/apxs" \
    --with-config-file-scan-dir="${PREFIX}/php.d" \
    --with-iconv-dir="/usr/local" \
    --with-openssl=${SSL} \
    --with-openssl-dir=${SSL} \
    --with-zlib=/usr \
    --with-zlib-dir=/usr \
    --enable-gd \
    --with-external-gd \
    --with-bz2="/usr/local" \
    --with-xmlrpc \
    --enable-exif \
    --enable-soap \
    --enable-ftp \
    --enable-sockets \
    --enable-mbstring \
    --enable-calendar \
    --enable-bcmath \
    --enable-pcntl \
    --enable-shmop \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --with-curl="/usr/local" \
    --with-zip \
    --with-mysql-sock=/tmp/mysql.sock \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-kerberos=/usr \
    --with-imap-ssl=/usr \
    --without-iodbc \
    --with-gettext=shared,/usr/local \
    CC="${GCC}/bin/gcc" \
    CXX="${GCC}/bin/g++" \
    CPP="${GCC}/bin/cpp" \
    CPPFLAGS="-I${SSL}/include -I/usr/local/include -I/usr/include" \
    CFLAGS="${CFLAGS}" \
    CXXFLAGS="${CFLAGS}" \
    LDFLAGS="-L${SSL}/lib -L${GCC}/lib -L/usr/local/lib -L/usr/lib"
make
make test >check.log

注)「¥」は実際には半角の「\」(バックスラッシュ)

2.3 ビルドしてインストール

$ bzcat php-7.4.1.tar.bz2 | tar xf -
$ cd php-7.4.1
$ vi build.sh  # 上のスクリプトを作成
$ chmod +x build.sh
$ ./build.sh
$ sudo make install

 ビルドにはかなり時間がかかるし、make testも最後まで実行できず途中でメモリ不足でコケる。コケたときのメッセージを見る限り4GB以上のメモリを採ろうとして失敗しているようなので、32bit OSでは失敗して当たり前。まぁ、使う機能が動きゃ良いんで、全テストがパスしなくても気にしないっと。

 インストールしたらApacheを再起動して完了。


< 過去の記事 [ 1月の 全てのカテゴリ リスト ] 新しい記事 >

2020 calendar
1月
1234
567891011
12131415161718
19202122232425
262728293031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.