linux:centos:centos6_php516_install

CentOS6 に PHP 5.1.6 をインストールする

以下の内容は、CentOS 6.3 に PHP 5.3.18 (Remiリポジトリ) と MySQL 5.5.28 (Remiリポジトリ) がインストールされた環境に、PHP 5.1.6 を混在させる方法です。

 古いバージョンはUnsupported Historical Releasesより探すことができる。

CentOS 6.3 の OpenSSL が 1.0.0 なので、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 をソースからインストールする。

  1. 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 でバグでビルドできない。
    #2094: BUG: 0.9.8x md5-x86_64.s:41: Error: 0xd76aa478 out range of signed 32bit displacement

  2. ダウンロードした圧縮ファイルを解凍する。
    $ tar zxvf openssl-0.9.8x.tar.gz
  3. configure する。(openssl は ./config)
    $ cd openssl-0.9.8x
    $ ./config --prefix=/usr/local shared
  4. ビルドしてインストールする。
    $ make
    $ sudo make install LIBDIR=lib64

    ※本家の tar ball は x86_64 でも /usr/local/lib にインストールされるので、/usr/local/lib64に配置するように LIBDIR=lib64 を指定する。

  1. ソースをダウンロードする。
    $ cd work
    $ curl -O http://museum.php.net/php5/php-5.1.6.tar.bz2
  2. ダウンロードした圧縮ファイルを解凍する。
    $ tar jxvf php-5.1.6.tar.bz2
  3. ビルドに必要なパッケージをインストールする。
    $ 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
  4. 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 で確認できる。

  5. 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);
  6. 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
    < };
    <
  7. 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]);
  8. ビルドしてインストールする。
    $ make
    $ sudo make install
$ 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
  • linux/centos/centos6_php516_install.txt
  • 最終更新: 2024/02/04 13:41
  • by ともやん