PHP5.3.29をCentOS6にソースインストール

覚書です。
ところどころ省いています。
実践環境で使う場合はご注意ください。

本ページの「PHP5.3.29 のインストール」は、PHP5.2.8をインストールしたあとに行っております。lib の一部などが足らなくエラーになる場合は、 PHP5.2.8の記事もご確認ください。

特徴

  • ソースコードからのインストール
  • 複数バージョンの共存

特定バージョンでの開発や動作確認など開発環境での用途を目的としています。

環境

実施日2019-10-23
サーバさくらのVPS 2G
OSCentOS 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.3.29

公式サイトからダウンロードします。
https://www.php.net/downloads.php

上記は最新バージョンのページですので、古いバージョンは「Old archives」から取得します。
https://www.php.net/releases/

いっぱい出てきますが、ブラウザの検索機能から「5.3.29」で検索するとスグです。

いくつか種類があります。
今回は、Linuxにソースインストールするので「PHP 5.3.29 (tar.gz)」をクリックします。

php-5.3.29.tar.gz
がダウンロードされます。

ダウンロードしたら /tmp にアップしておきます。
/tmp/php-5.3.29.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で指定することになります。

インストール

設定

DIR_SOURCE=/tmp
PHP_VERSION=5.3.29
MYSQL_VERSION=5.5.27
MYSQL_TITLE=mysqlnd
MYSQL_CLIENT=mysqlnd
MYSQL_SOCKET_PATH=/var/lib/mysql/mysql.sock

MYSQL_TITLE
インストール先のディレクトリ名として使用。

MYSQL_CLIENT=mysqlnd
PHP5.3.0 以降は「 mysqlnd 」推奨。PPHP5.2系以前は「mysql_config」の絶対パス。

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 \
--with-openssl \
--without-pear \
--enable-cgi \
--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

インストール

make
make test
make install

パスを通す

# セット
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.3.29-mysqlc-mysqlnd/php.ini

# php.ini
vi /usr/local/lib/php-5.3.29-mysqlc-mysqlnd/php.ini

バージョン

php-5.3.29-mysqlc-mysqlnd -v
PHP 5.3.29 (cli) (built: Oct 23 2019 11:19:25)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies