====== CentOS6 に PHP 5.1.6 をインストールする ======
以下の内容は、CentOS 6.3 に PHP 5.3.18 (Remiリポジトリ) と MySQL 5.5.28 (Remiリポジトリ) がインストールされた環境に、PHP 5.1.6 を混在させる方法です。\\
\\
===== PHP の古いバージョンを探す =====
古いバージョンは[[http://php.net/releases/index.php|Unsupported Historical Releases]]より探すことができる。\\
===== 少し古い OpenSSL をソースからインストール =====
CentOS 6.3 の OpenSSL が 1.0.0 なので、[[https://bugs.php.net/bug.php?id=53547|Bug #53547 Cannot compile PHP with OpenSSL]] のバグで PHP をビルドできないようである。\\
$ rpm -qa | grep openssl
openssl-1.0.0-25.el6_3.1.x86_64
openssl-devel-1.0.0-25.el6_3.1.x86_64
バグを回避する為に、少し古い OpenSSL をソースからインストールする。\\
- OpenSSL 0.9.8 のソースをダウンロードする。
$ cd ~/work
$ curl -O http://www.openssl.org/source/openssl-0.9.8x.tar.gz
※openssl-0.9.8e.tar.gz だと x86_64 でバグでビルドできない。\\ [[http://rt.openssl.org/Ticket/Display.html?id=2094&user=guest&pass=guest|#2094: BUG: 0.9.8x md5-x86_64.s:41: Error: 0xd76aa478 out range of signed 32bit displacement]]
- ダウンロードした圧縮ファイルを解凍する。
$ tar zxvf openssl-0.9.8x.tar.gz
- configure する。(openssl は ./config)
$ cd openssl-0.9.8x
$ ./config --prefix=/usr/local shared
- ビルドしてインストールする。
$ make
$ sudo make install LIBDIR=lib64
※本家の tar ball は x86_64 でも /usr/local/lib にインストールされるので、/usr/local/lib64に配置するように LIBDIR=lib64 を指定する。
===== PHP をソースからインストール =====
- ソースをダウンロードする。
$ cd work
$ curl -O http://museum.php.net/php5/php-5.1.6.tar.bz2
- ダウンロードした圧縮ファイルを解凍する。
$ tar jxvf php-5.1.6.tar.bz2
- ビルドに必要なパッケージをインストールする。
$ sudo yum install zlib-devel openssl-devel db4-devel pcre-devel
$ sudo yum install libicu libicu-devel gettext-devel gd-devel
$ sudo yum install readline-devel libxml2-devel libxslt-devel
$ sudo yum install libcurl-devel
$ sudo yum install mysql-devel postgresql-devel --enablerepo=remi
- configure する。
$ cd php-5.1.6
$ ./configure \
--prefix=/usr/local/lib64/php-5.1.6 \
--with-config-file-path=/usr/local/lib64/php-5.1.6 \
--enable-cli \
--with-libdir=lib64 \
--enable-mbstring=shared \
--enable-intl=shared \
--with-icu-dir=shared \
--with-gettext=shared \
--with-pcre-regex=shared \
--with-pcre-dir=shared \
--with-readline=shared \
--with-libxml-dir=/usr/bin/xml2-config \
--enable-soap \
--enable-wddx \
--with-xmlrpc \
--with-xsl=shared \
--enable-force-cgi-redirect \
--enable-mbstr-enc-trans \
--enable-track-vars \
--enable-mbregex \
--with-gd=shared \
--with-jpeg-dir=/usr/include \
--with-png-dir=/usr/include \
--enable-gd-native-ttf \
--with-openssl=/usr/local \
--with-zlib=shared \
--with-curl=shared \
--enable-ftp=shared \
--with-mysql=shared \
--with-mysqli=shared \
--with-pdo-mysql=shared \
--with-pdo-sqlite=shared \
--with-pgsql=shared \
--enable-sqlite-utf8 \
--enable-zend-multibyte \
--program-suffix=51 \
2>&1 | tee configure_log.txt
※configure のオプション一覧は ./configure --help で確認できる。
- curl の interface.c がエラーになるので修正する。\\ 以下の2つの行をコメントアウトする。\\ REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII); \\ REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
$ cp ext/curl/interface.c ext/curl/interface.c.org
$ vi ext/curl/interface.c
$ diff ext/curl/interface.c ext/curl/interface.c.org
274c274
< //REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII);
---
> REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII);
314c314
< //REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
---
> REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);
- mysqli の mysqli.c がエラーになるので、mysql.h を修正する。
enum mysql_protocol_type
{
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};
と
typedef struct character_set
{
unsigned int number; /* character set number */
unsigned int state; /* character set state */
const char *csname; /* collation name */
const char *name; /* character set name */
の間に
/*
There are three types of queries - the ones that have to go to
the master, the ones that go to a slave, and the adminstrative
type which must happen on the pivot connectioin
*/
enum mysql_rpl_type
{
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
};
を挿入する。
$ sudo cp /usr/include/mysql/mysql.h /usr/include/mysql/mysql.h.org
$ sudo vi /usr/include/mysql/mysql.h
$ diff /usr/include/mysql/mysql.h /usr/include/mysql/mysql.h.org
227,236d226
< /*
< There are three types of queries - the ones that have to go to
< the master, the ones that go to a slave, and the adminstrative
< type which must happen on the pivot connectioin
< */
< enum mysql_rpl_type
< {
< MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
< };
<
- mysqli の mysqli_api.c がエラーになるので修正する。\\ 145行目以降4カ所:
bind[ofs].buffer = (gptr)&Z_DVAL_PP(args[i]);
bind[ofs].buffer = &Z_DVAL_PP(args[i]);
※(gptr)にキャストしている部分をすべて除去する。
$ cp ext/mysqli/mysqli_api.c ext/mysqli/mysqli_api.c.org
$ vi ext/mysqli/mysqli_api.c
$ diff ext/mysqli/mysqli_api.c ext/mysqli/mysqli_api.c.org
145c145
< bind[ofs].buffer = &Z_DVAL_PP(args[i]);
---
> bind[ofs].buffer = (gptr)&Z_DVAL_PP(args[i]);
151c151
< bind[ofs].buffer = &Z_LVAL_PP(args[i]);
---
> bind[ofs].buffer = (gptr)&Z_LVAL_PP(args[i]);
601c601
< stmt->stmt->params[i].buffer = &Z_LVAL_PP(&stmt->param.vars[i]);
---
> stmt->stmt->params[i].buffer = (gptr)&Z_LVAL_PP(&stmt->param.vars[i]);
605c605
< stmt->stmt->params[i].buffer = &Z_LVAL_PP(&stmt->param.vars[i]);
---
> stmt->stmt->params[i].buffer = (gptr)&Z_LVAL_PP(&stmt->param.vars[i]);
- ビルドしてインストールする。
$ make
$ sudo make install
===== ビルドした PHP をテストする =====
$ cp php.ini-dist php.ini
$ vi php.ini
php.ini に extension をロードするように追記する。
extension=modules/pcre.so
テストを実行する。
$ make test
~省略~
PASS XMLWriter: libxml2 XML Writer, file buffer, flush [ext/xmlwriter/tests/OO_001.phpt]
PASS XMLWriter: libxml2 XML Writer, membuffer, flush [ext/xmlwriter/tests/OO_002.phpt]
PASS XMLWriter: libxml2 XML Writer, membuffer, flush, text, attribute [ext/xmlwriter/tests/OO_003.phpt]
PASS XMLWriter: libxml2 XML Writer, file buffer, flush [ext/xmlwriter/tests/OO_004.phpt]
PASS XMLWriter: libxml2 XML Writer, comments [ext/xmlwriter/tests/OO_005.phpt]
PASS XMLWriter: libxml2 XML Writer, startDTD/writeElementNS [ext/xmlwriter/tests/OO_006.phpt]
FAIL XMLWriter: libxml2 XML Writer, Elements & Attributes [ext/xmlwriter/tests/OO_007.phpt]
PASS XMLWriter: libxml2 XML Writer DTD Element & Attlist [ext/xmlwriter/tests/OO_008.phpt]
FAIL XMLWriter: PI, Comment, CDATA [ext/xmlwriter/tests/OO_009.phpt]
=====================================================================
TIME END 2012-10-30 23:23:40
=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped : 56
Exts tested : 23
---------------------------------------------------------------------
Number of tests : 2264 1666
Tests skipped : 598 ( 26.4%) --------
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 13 ( 0.6%) ( 0.8%)
Tests passed : 1653 ( 73.0%) ( 99.2%)
---------------------------------------------------------------------
Time taken : 52 seconds
=====================================================================
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
Testing $argc and $argv handling (GET) [tests/basic/011.phpt]
Test 7: DTD tests [ext/dom/tests/dom007.phpt]
iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt]
date_sunrise() and date_sunset() functions [ext/standard/tests/general_functions/sunfuncts.phpt]
Bug #32001 (xml_parse*() goes into infinite loop when autodetection in effect), using UTF-* [ext/xml/tests/bug32001.phpt]
Bug #35447 (xml_parse_into_struct() chokes on the UTF-8 BOM) [ext/xml/tests/bug35447.phpt]
XMLReader: libxml2 XML Reader, DTD [ext/xmlreader/tests/008.phpt]
XMLReader: accessing empty and non existing attributes [ext/xmlreader/tests/012.phpt]
Bug #38431 (xmlrpc_get_type() crashes PHP on objects) [ext/xmlrpc/tests/bug38431.phpt]
XMLWriter: libxml2 XML Writer, Elements & Attributes [ext/xmlwriter/tests/007.phpt]
XMLWriter: PI, Comment, CDATA [ext/xmlwriter/tests/009.phpt]
XMLWriter: libxml2 XML Writer, Elements & Attributes [ext/xmlwriter/tests/OO_007.phpt]
XMLWriter: PI, Comment, CDATA [ext/xmlwriter/tests/OO_009.phpt]
=====================================================================
You may have found a problem in PHP.
We would like to send this report automatically to the
PHP QA team, to give us a better understanding of how
the test cases are doing. If you don't want to send it
immediately, you can choose "s" to save the report to
a file that you can send us later.
Do you want to send this report now? [Yns]: s
===== 参考文献 =====
[[http://www.atmarkit.co.jp/flinux/rensai/buildlamp/lamp_26/26_1.html|第26回 早速PHPをビルド! そしてテスト!]]\\
[[http://www.ahref.org/tech/server/server-tips/667.html|Apache2で複数バージョンのPHPを使い分ける]]\\
[[http://php.net/manual/ja/install.php|PHP: インストールと設定 - Manual]]\\
[[http://kadoppe.com/archives/2012/08/install-php51-52-with-openssl-to-centos63.html|CentOS 6.3に「–with-openssl」オプション付きでPHP 5.1/5.2系をインストールしようとするとエラー → 解決]]\\
[[http://bytes.com/topic/php/answers/824379-compiling-php-5-1-6-fedora-9-a|Compiling PHP-5.1.6 on Fedora 9]]\\
[[http://forums.freebsd.org/showthread.php?p=63484|[Solved] Error in Installing php5-mysqli - The FreeBSD Forums]]\\
[[http://lists.mysql.com/commits/29244|PHP mysqlnd svn commit: r415 - in trunk: php5/ext/mysqli php6/ext/mysqli]]\\
[[http://tairand.exblog.jp/6673884/|php5 のbuild 3 : まったり生活記:のーたれ ~脳内垂れ流し~]]\\