文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 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 : まったり生活記:のーたれ ~脳内垂れ流し~]]\\ linux/centos/centos6_php516_install.txt 最終更新: 2024/02/04 13:41by ともやん