PHP7.2.33をCentOS6にソースインストール
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
さくらのVPSのCentOS 6にPHP7.2.33をソースからインストールした覚書です。
なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
弊社では、2000年台前半頃からPHPを触っている関係で、古いシステムでも解析して扱うことができます。当時の担当者とか制作会社がいなくなったなどで困られた方からの相談を頂くことがよくあります。お気軽にお問い合わせください。
特徴
- ソースコードからのインストール
- 複数バージョンの共存
特定バージョンでの開発や動作確認など開発環境での用途を目的としています。
環境
実施日 | 2020-9-1 |
サーバ | さくらの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のソースコードをダウンロードしてコンパイルして終わりってできたら良いんですがそういうわけにもいかなく色々準備しておくことがあります。
なお、本記事は、こちらの他のPHPバージョンをインストールした後に行っております。
MySQL
事前にMySQLクライアントとして使うMySQLをインストールしておきます(インストール手順は別の記事で後日)
MySQLを使わない場合、他のデータベースを使う場合は、以降の configure を調整してください
libxml2
libxml2-2.9.8
PHP7.0.0からは 2.9.0 以上が良さそうです。
PHP Predefined Constants の 「Only available in Libxml」
ここにある定数を使わないなら古いバージョンでも動きます。
ダウンロードURLの確認
PHP公式サイトから入手します。
https://www.php.net/releases/
新バージョンが出て古くなった場合は「Old archives」のほうにあります。
今回は、PHP7.2.33のURLを確認します。
対象バージョンの「tar.gz」がお目当てです。
https://www.php.net/distributions/php-7.2.33.tar.gz
リンク先を確認すると▲になっているので控えておきます。ちなみにGoogle Chromeだったらリンクの上で右クリック「リンクのアドレスをコピー」で取れます。
インストール
設定
PHP_VERSION=7.2.33
MYSQL_TITLE=mysqlnd
MYSQL_CLIENT=mysqlnd
MYSQLI_CLIENT=mysqlnd
MYSQLPDO_CLIENT=mysqlnd
DIR_SOURCE=/tmp
MYSQL_VERSION=5.5.41
事前準備
# /usr/local/src にディレクトリを作る
mkdir /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE
# ↑で作ったディレクトリに移動
cd /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE
# 控えておいたURLからダウンロード
wget https://www.php.net/distributions/php-$PHP_VERSION.tar.gz
# 解凍
tar xzf php-$PHP_VERSION.tar.gz
# 解凍先に移動
cd php-$PHP_VERSION
--with-imap を付ける場合
yum install libc-client-devel
--with-mcrypt を付ける場合
yum install libmcrypt-devel
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-iconv \
--with-layout=GNU \
--with-kerberos \
--with-unixODBC=shared,/usr \
--with-libxml-dir=/usr/local/lib/libxml2-2.9.8 \
--with-gd \
--with-zlib \
--with-mysqli=$MYSQLI_CLIENT \
--with-pdo-mysql=$MYSQLPDO_CLIENT \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-openssl \
--without-pear \
--enable-cgi \
--enable-mbstring \
--enable-cli \
--enable-zip \
--enable-gd-native-ttf \
--enable-exif \
--enable-ftp \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-wddx \
--enable-shmop \
--enable-calendar \
--disable-debug \
--with-imap=/usr \
--with-imap-ssl \
--enable-intl \
--with-mcrypt
yumインストールしたものを使うなら(バージョン古い)
--with-libxml-dir=/usr
imapを使うなら
--with-imap=/usr
--with-imap-ssl
インストール
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
# 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-7.2.33-mysqlc-mysqlnd/php.ini
# php.ini
vi /usr/local/lib/php-7.2.33-mysqlc-mysqlnd/php.ini
バージョン
php-7.2.33-mysqlc-mysqlnd -v
PHP 7.2.33 (cli) (built: Sep 1 2020 01:17:07) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
あとがき
mysqlnd について
昔はMySQLクライアントを複数から選択できていたので、「php-バージョン-mysqlc-クライアント」のようにしていたけど、もうmysqlnd一択みたいな感じなので名前に入れなくても良いかなと思います。
詳しくはこのあたり。
インストール > 設定の MYSQL_VERSION と MYSQL_CLIENT は使っていないので不要ですね。
どちらも過去のPHPの名残りです。