linux:centos:centos6_php516_install

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
linux:centos:centos6_php516_install [2024/02/04 13:41] – 削除 - 外部編集 (Unknown date) 非ログインユーザーlinux:centos:centos6_php516_install [2024/02/04 13:41] (現在) – ↷ linux:centos6_php516_install から linux:centos:centos6_php516_install へページを移動しました。 ともやん
行 1: 行 1:
 +====== 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 をビルドできないようである。\\
 +<code>
 +$ 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
 +</code>
 +バグを回避する為に、少し古い OpenSSL をソースからインストールする。\\
 +  - OpenSSL 0.9.8 のソースをダウンロードする。<code>
 +$ cd ~/work
 +$ curl -O http://www.openssl.org/source/openssl-0.9.8x.tar.gz
 +</code>※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]]
 +  - ダウンロードした圧縮ファイルを解凍する。<code>
 +$ tar zxvf openssl-0.9.8x.tar.gz
 +</code>
 +  - configure する。(openssl は ./config)<code>
 +$ cd openssl-0.9.8x
 +$ ./config --prefix=/usr/local shared
 +</code>
 +  - ビルドしてインストールする。<code>
 +$ make
 +$ sudo make install LIBDIR=lib64
 +</code>※本家の tar ball は x86_64 でも /usr/local/lib にインストールされるので、/usr/local/lib64に配置するように LIBDIR=lib64 を指定する。
 +===== PHP をソースからインストール =====
 +  - ソースをダウンロードする。<code>
 +$ cd work
 +$ curl -O http://museum.php.net/php5/php-5.1.6.tar.bz2
 +</code>
 +  - ダウンロードした圧縮ファイルを解凍する。<code>
 +$ tar jxvf php-5.1.6.tar.bz2
 +</code>
 +  - ビルドに必要なパッケージをインストールする。<code>
 +$ 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
 +</code>
 +  - configure する。<code>
 +$ 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
 +</code>※configure のオプション一覧は ./configure --help で確認できる。
 +  - curl の interface.c がエラーになるので修正する。\\ 以下の2つの行をコメントアウトする。\\ REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII); \\ REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION);<code>
 +$ 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);
 +</code>
 +  - mysqli の mysqli.c がエラーになるので、mysql.h を修正する。<code c>
 +enum mysql_protocol_type
 +{
 +MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
 +MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
 +};
 +</code> と <code c>
 +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 */
 +</code> の間に <code c>
 +/*
 +  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
 +};
 +</code> を挿入する。<code>
 +$ 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
 +< };
 +<
 +</code>
 +  - mysqli の mysqli_api.c がエラーになるので修正する。\\ 145行目以降4カ所: <code c>
 +bind[ofs].buffer = (gptr)&Z_DVAL_PP(args[i]);
 +</code><code c>
 +bind[ofs].buffer = &Z_DVAL_PP(args[i]);
 +</code>※(gptr)にキャストしている部分をすべて除去する。<code>
 +$ 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]);
 +</code>
 +  - ビルドしてインストールする。<code>
 +$ make
 +$ sudo make install
 +</code>
 +
 +===== ビルドした PHP をテストする =====
 +<code>
 +$ cp php.ini-dist php.ini
 +$ vi php.ini
 +</code>
 +php.ini に extension をロードするように追記する。
 +<code ini>
 +extension=modules/pcre.so
 +</code>
 +テストを実行する。
 +<code>
 +$ 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
 +</code>
 +===== 参考文献 =====
 +[[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 : まったり生活記:のーたれ ~脳内垂れ流し~]]\\