PHP5.2.8をCentOS6にソースインストール
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
覚書です。
ところどころ省いています。
実践環境で使う場合はご注意ください。
本ページの「PHP5.2.8 のインストール」は、PHP7.3.6をインストールしたあとに行っております。lib の一部などが足らなくエラーになる場合は、 PHP7.3.6の記事もご確認ください。
PHP5.2.8をWindows10にインストールする記事はこちらです。
特徴
- ソースコードからのインストール
- 複数バージョンの共存
特定バージョンでの開発や動作確認など開発環境での用途を目的としています。
環境
実施日 | 2019-10-23 |
サーバ | さくらのVPS 2G |
OS | CentOS 6.10 |
cat /etc/redhat-release
CentOS release 6.10 (Final)
rpm -qa | grep centos-release
centos-release-scl-7-4.el6.centos.noarch
centos-release-6-10.el6.centos.12.3.x86_64
centos-release-scl-rh-2-4.el6.centos.noarch
事前準備
PHP 5.2.8
公式サイトからダウンロードします。
https://www.php.net/downloads.php
上記は最新バージョンのページですので、古いバージョンは「Old archives」から取得します。
https://www.php.net/releases/
いっぱい出てきますが、ブラウザの検索機能から「5.2.8」で検索するとスグです。
いくつか種類があります。
今回は、Linuxにソースインストールするので「PHP 5.2.8 (tar.gz)」をクリックします。
php-5.2.8.tar.gz
がダウンロードされます。
ダウンロードしたら /tmp にアップしておきます。
/tmp/php-5.2.8.tar.gz
アップ方法は、FTPでもSSHでも他の方法でもなんでも構いません。
MySQL
事前にMySQLクライアントとして使うMySQLをインストールしておきます(インストール手順は別の記事で後日)
MySQLを使わない場合、他のデータベースを使う場合は、以降の configure を調整してください
参考までに今回のサーバでの操作を残します。
記憶では yum で入れた mysql を使っていたはずなので確認するところからです。
# mysql -V
mysql Ver 14.14 Distrib 5.5.27, for Linux (x86_64) using readline 5.1
# yum list mysql
インストール済みパッケージ
mysql.x86_64 5.5.27-1.el6.remi @remi
ということで、yum で入れた mysql5.5.27 が入ってますね。
次に socket の場所なんですが、phpMyAdmin があるので「SQL」タブから次のように打ち込んでみます。
show variables like '%sock%';
出てきたところが socket の場所で、PHPの configureで指定することになります。
open ssl
PHP 5.1.0 ~ 5.2.10で古いOpenSSLが必要になります。
次のコマンドで現在のバージョンを確認してみます。
openssl version
0.9.8より新しいバージョンだとPHP5.2.10以前ではエラーになります。
次の手順でインストールしておきます。
OpenSSLのダウンロードページから「openssl-0.9.8ze.tar.gz」をダウンロードして、サーバにアップします。
/tmp/openssl-0.9.8ze.tar.gz
ここに置いたこととして進めます。
mkdir /usr/local/src/openssl-0.9.8ze
cp /tmp/openssl-0.9.8ze.tar.gz /usr/local/src/openssl-0.9.8ze/openssl-0.9.8ze.tar.gz
cd /usr/local/src/openssl-0.9.8ze
tar xzf openssl-0.9.8ze.tar.gz
cd openssl-0.9.8ze
./config --prefix=/usr/local/lib/openssl-0.9.8ze shared
make
make install
ln -s /usr/local/lib/openssl-0.9.8ze/lib /usr/local/lib/openssl-0.9.8ze/lib64
インストール
設定
DIR_SOURCE=/tmp
PHP_VERSION=5.2.8
MYSQL_VERSION=5.5.27
MYSQL_TITLE=5.5.27
MYSQL_CLIENT=/usr/lib64/mysql/mysql_config
MYSQL_SOCKET_PATH=/var/lib/mysql/mysql.sock
MYSQL_SOCKET_PATH は phpMyAdmin からSQLで「show variables like '%sock%'」で確認するのが簡単です。
事前準備
# /usr/local/src にディレクトリを作る
mkdir /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE
# ↑で作ったディレクトリに移動
cd /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE
# /tmp にアップしておいた tar.gz を移動
cp $DIR_SOURCE/php-$PHP_VERSION.tar.gz /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php-$PHP_VERSION.tar.gz
# 解凍
tar xzf php-$PHP_VERSION.tar.gz
# 解凍先に移動
cd php-$PHP_VERSION
configure
./configure \
--prefix=/usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE \
--program-suffix=-$PHP_VERSION-mysqlc-$MYSQL_TITLE \
--with-config-file-path=/usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE \
--with-libdir=lib64 \
--with-pic \
--with-curl \
--with-freetype-dir=/usr \
--with-png-dir=/usr \
--with-jpeg-dir=/usr \
--with-gettext \
--with-gmp \
--with-iconv \
--with-layout=GNU \
--with-kerberos \
--with-unixODBC=shared,/usr \
--with-libxml-dir=/usr \
--with-gd \
--with-zlib \
--with-mysql=$MYSQL_CLIENT \
--with-mysqli=$MYSQL_CLIENT \
--with-mysql-sock=$MYSQL_SOCKET_PATH \
--with-pdo-mysql=$MYSQL_CLIENT \
--without-pear \
--with-openssl=/usr/local/lib/openssl-0.9.8ze \
--enable-cgi \
--enable-fastcgi \
--enable-mbstring \
--enable-cli \
--enable-gd-native-ttf \
--enable-exif \
--enable-ftp \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-wddx \
--enable-shmop \
--enable-zip \
--enable-calendar
その他
libxml2 にyumインストールしたものを使うなら(バージョン古い)
--with-libxml-dir=/usr
imap を使うなら
--with-imap=/usr
--with-imap-ssl
mcrypt を使うなら
--with-mcrypt
soap を使うなら
--enable-soap
--enable-fastcgi
PHP5.2以前では必要。PHP5.3.0以降では--enable-cgi を使う。
インストール
make
make test
make install
makeでエラー
makeで次のエラーが発生した場合は、mysqlのファイルをちょっといじってやる必要があります。
# make
[省略]/php-5.2.8/libtool --silent --preserve-dup-deps --mode=compile gcc -Iext/mysqli/ -I[省略]/ -DPHP_ATOM_INC -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/include -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/main -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8 -I/usr/include/libxml2 -I/usr/local/lib/openssl-0.9.8ze/include -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/ext/date/lib -I/usr/include/freetype2 -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/ext/mbstring/oniguruma -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/ext/mbstring/libmbfl -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/ext/mbstring/libmbfl/mbfl -I/usr/include/mysql -I/usr/local/src/php-5.2.8-mysqlc-5.5.27/php-5.2.8/TSRM -I[省略]/Zend -I/usr/include -g -O2 -c [省略]/mysqli.c -o ext/mysqli/mysqli.lo
[省略]/mysqli.c: In function 'zm_startup_mysqli':
[省略]/mysqli.c:644: error: 'MYSQL_RPL_MASTER' undeclared (first use in this function)
[省略]/mysqli.c:644: error: (Each undeclared identifier is reported only once
[省略]/mysqli.c:644: error: for each function it appears in.)
[省略]/mysqli.c:645: error: 'MYSQL_RPL_SLAVE' undeclared (first use in this function)
[省略]/mysqli.c:646: error: 'MYSQL_RPL_ADMIN' undeclared (first use in this function)
make: *** [ext/mysqli/mysqli.lo] エラー 1
ちなみに解決方法はForumsのこちらにあります。
次の手順で行ってください。
※yumでインストールしたmysql向けです。
※実際に書き換えを進める前にこの続きを一通り読むことをお勧めします。
vi /usr/include/mysql/mysql.h
226行目のところに次の内容を書き加えます。
/*
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
};
挿入した前後を含めると下記のようになります。227行 ~ 235行目が追加した個所です。
enum mysql_protocol_type
{
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};
/*
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
};
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 */
const char *comment; /* comment */
const char *dir; /* character set directory */
unsigned int mbminlen; /* min. length for multibyte strings */
unsigned int mbmaxlen; /* max. length for multibyte strings */
} MY_CHARSET_INFO;
これで、 make するといけると思いましたが、別のエラーが出ました。
それで行き着いたのは、mysqliのバグで、--with-mysqli を付けるのはやめましょうって答えでした。
とりあえずはどうしても必要なものじゃないので、これ以上の深追いはしないことにします。
vi /usr/include/mysql/mysql.h
に加えた変更も元に戻しておきます。
ちなみに「undefined reference to `mysql_slave_query'」で検索すると色々出てきますので深追いしたい方はどうぞです。
パスを通す
# セット
echo 'PATH=$PATH:'"/usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE"/bin >> /etc/profile.d/php.sh
echo "export PATH" >> /etc/profile.d/php.sh
# 確認
cat /etc/profile.d/php.sh
# 反映
source /etc/profile.d/php.sh
php.iniを設定
# php.ini-development を php.ini としてコピーして配置
cp /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php-$PHP_VERSION/php.ini-development /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# タイムゾーンを Asia/Tokyo に変更
sed -i -e "s/^;date\.timezone =[^A-Za-z]*$/date.timezone =/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
sed -i -e "s/^date\.timezone =[^A-Za-z]*$/date.timezone = Asia\/Tokyo/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
次の3つの .sock は yum でMySQLをインストールした場合の位置
# sed -i -e "s/^mysql\.default_socket =$/mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^mysqli\.default_socket =$/mysqli.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^pdo_mysql\.default_socket=$/pdo_mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
確認
# php.iniのタイムゾーン
grep -E 'date.timezone|default_socket' /usr/local/lib/php-5.2.8-mysqlc-5.5.27/php.ini
# php.ini
vi /usr/local/lib/php-5.2.8-mysqlc-5.5.27/php.ini
バージョン
php-5.2.8-mysqlc-5.5.27 -v
PHP 5.2.8 (cli) (built: Oct 23 2019 02:15:37)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies