PHP8.3.25をCentOS6にソースインストール

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

さくらのVPSにCentOS 6をインストールした覚書です。

今回は、PHPの最新版である PHP8.3.25 をソースからインストールします。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

弊社では、2000年台前半頃からPHPを触っている関係で、古いシステムでも解析して扱うことができます。当時の担当者とか制作会社がいなくなったなどで困られた方からの相談を頂くことがよくあります。お気軽にお問い合わせください。

環境

実施日2025-08-31
サーバさくらの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のソースコードをダウンロードしてコンパイルして終わりってできたら良いんですがそういうわけにもいかなく色々準備しておくことがあります。

なお、本記事は、こちらの他のPHPバージョンをインストールした後に行っております。

MySQL

事前にMySQLクライアントとして使うMySQLをインストールしておきます(インストール手順は別の記事で後日)

MySQLを使わない場合、他のデータベースを使う場合は、以降の configure を調整してください

PHP8.3.25のダウンロード

サーバに1つのPHPだけだったら、YUMで入れたら楽なんですが、異なるバージョンのPHPを同居させようとなったらソースからインストールしたほうが融通が利きます。

公式サイトからダウンロードURLを確認

https://www.php.net/downloads

こちらからPHPのソースコードがダウンロードできます。
ただこちらは最新バージョンが対象のページです。

より新しいバージョンが出たときは、同じページの右メニューの一番下に「Old archives」があるのでクリックします。

https://www.php.net/releases/

ということで、ここでは「PHP 8.3.25 (tar.gz)」を使います。

https://www.php.net/distributions/php-8.3.25.tar.gz

リンク先を確認すると▲になっているのでこちらを使っていきます。ちなみにGoogle Chromeだったらリンクの上で右クリック「リンクのアドレスをコピー」で取れます。

PHP8.3.25のインストール

設定

DIR_SOURCE=/tmp
PHP_VERSION=8.3.25
PHP_DOWNLOAD_URL=https://www.php.net/distributions/php-8.3.25.tar.gz
MYSQL_TITLE=mysqlnd
MYSQL_CLIENT=mysqlnd
MYSQLI_CLIENT=mysqlnd
MYSQLPDO_CLIENT=mysqlnd

事前準備

# 確認
ls -la /usr/local/src
ls -la /usr/local/lib

# /usr/local/src にディレクトリを作る
mkdir /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE

# ↑で作ったディレクトリに移動
cd /usr/local/src/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE

# 公式サイトからダウンロード
wget $PHP_DOWNLOAD_URL

# 解凍
tar xzf php-$PHP_VERSION.tar.gz

# 解凍先に移動
cd php-$PHP_VERSION

新しいビルド環境

# GCC 9.1.0 の場所
export GCCROOT=/usr/local/lib/gcc-9.1.0
export PATH="$GCCROOT/bin:$PATH"
export CC="$GCCROOT/bin/gcc"
export CXX="$GCCROOT/bin/g++"

# binutils 2.31.1 の場所
export BINUTILSROOT=/usr/local/lib/binutils-2.31.1
export PATH="$BINUTILSROOT/bin:$PATH"

# 最小限の安全な CFLAGS/CXXFLAGS(AVXなどを使わないように)
export CFLAGS="-O2 -march=x86-64 -mtune=generic"
export CXXFLAGS="-O2 -march=x86-64 -mtune=generic -std=gnu++11"

configure

# 定義されているか確認
echo $PKG_CONFIG_PATH
# libxml2 確認
ls -la /usr/local/lib/libxml2-2.9.9

# libxml2 加える
# export PKG_CONFIG_PATH=/usr/local/lib/libxml2-2.9.9/lib/pkgconfig
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libxml2-2.9.9/lib/pkgconfig"
# libzip 確認
ls -la /usr/local/lib/libzip-バージョン

# libzip 加える (▲が 1.5.2だった)
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.5.2/lib64/pkgconfig"
./configure \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS" \
--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-gettext \
--with-iconv \
--with-layout=GNU \
--with-unixODBC=shared,/usr \
--with-libxml \
--with-zlib \
--with-mysql=$MYSQL_CLIENT \
--with-mysqli=$MYSQL_CLIENT \
--with-mysql-sock=$MYSQL_SOCKET_PATH \
--with-pdo-mysql=$MYSQL_CLIENT \
--with-openssl \
--with-zip \
--without-pear \
--enable-cgi \
--enable-mbstring \
--enable-cli \
--enable-exif \
--enable-ftp \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-shmop \
--enable-calendar \
--enable-opcache \
--enable-intl \
--disable-debug \
--enable-gd \
--with-external-gd \
--with-xpm \
--with-freetype

OpenSSL1.1.1をインストール

opensslが古いと次のようなエラーがでます。

checking for openssl >= 1.0.2... no
configure: error: Package requirements (openssl >= 1.0.2) were not met:

バージョンの確認

openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL1.1.1をインストール / Rocky Linux9.4 on さくらのVPS
export LD_LIBRARY_PATH=/usr/local/lib/openssl-1.1.1w/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/openssl-1.1.1w/lib/pkgconfig"

GD

GD関連はPHP7.4.0から次のように変わりました。(説明

--enable-gd
--with-external-gd
--with-xpm
--with-webp
--with-freetype

configure エラー対応

No package 'krb5-gssapi' found

次のようなエラーメッセージのとき

No package 'krb5-gssapi' found
No package 'krb5' found

CentOS6の場合、諦めましょう。
https://forum.directadmin.com/threads/php-7-4-installation-error.59617/page-2
こちらで同じ現象が報告されています。
configure から --with-kerberos を外します。

No package 'sqlite3' found

次のようなエラーメッセージのとき

checking for sqlite3 > 3.7.4... no
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:

No package 'sqlite3' found

CentOS6の場合は、yum だとバージョンが古いのでダメです。
sqlite3をソースからインストールします。
SQLite3.34.0をCentOS6にソースインストール
その後▼をしてから configure し直します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/sqlite-3.34.0/lib/pkgconfig"

LibGD

次のようなエラーメッセージのとき

checking whether to enable JIS-mapped Japanese font support in GD... no
checking for gdlib >= 2.1.0... no
configure: error: Package requirements (gdlib >= 2.1.0) were not met:

Requested 'gdlib >= 2.1.0' but version of gd-devel is 2.0.34

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GDLIB_CFLAGS
and GDLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

PHP7.4.0 からLibGDは同梱されなくなりました。
libgdが無いのでインストールします。

LibGD2.3.3をCentOS6にソースインストール
CentOS6 + PHP 8.3.25 + LibGD 2.3.3 の組合せは configure が通って make でエラーになります。
回避策として LibGD 2.3.2 を使います。

LibGD2.3.2をCentOS6にソースインストール

ダウンロードURL
https://github.com/libgd/libgd/releases

その後▼をしてから configure し直します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libgd-2.3.2/lib/pkgconfig"

※--with-webp を使うなら追加でwebp関連のインストールが必要です。

No package 'icu-uc' found

次のようなエラーメッセージのとき

checking for icu-uc >= 50.1 icu-io icu-i18n... no
configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met:

No package 'icu-uc' found
No package 'icu-io' found
No package 'icu-i18n' found

CentOS6の場合は、yumだとバージョンが古いのでダメです。
icuをソースからインストールします。
ICU58.3をCentOS6にソースインストール

その後▼をしてから configure し直します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/icu4c-58.3/lib/pkgconfig"

No package 'oniguruma' found

次のようなエラーメッセージのとき

checking for oniguruma... no
configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' found

onigurumaがないのでインストールします。

CentOS6の場合は、onigurumaをソースからインストールします。
oniguruma6.9.8をCentOS6にソースインストール
その後▼して configure します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/oniguruma-6.9.8/lib/pkgconfig"

No package 'libzip' found

※本記事最初の方で「libzip-1.5.2」でやっているので、動かすレベルで充分なときは 1.6.1 でなくても大丈夫です。

次のようなエラーメッセージのとき

checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0... no
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

No package 'libzip' found
No package 'libzip' found
No package 'libzip' found

libzipがないのでインストールします。
libzip-1.6.1をCentOS7にソースインストール
その後▼して configure します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.6.1/lib64/pkgconfig"

No package 'libcurl' found

次のようなエラーメッセージのとき

checking for libcurl >= 7.29.0... no
configure: error: Package requirements (libcurl >= 7.29.0) were not met:

Requested 'libcurl >= 7.29.0' but version of libcurl is 7.19.7
You may find new versions of libcurl at http://curl.haxx.se/

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

libcurlがないのでインストールします。

libcurl 8.15.0 をCentOS6にソースインストール

その後▼して configure します。

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/zlib-1.3.1/lib/pkgconfig"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.6.1/lib64/pkgconfig"
export CURL_CFLAGS="$(pkg-config --cflags libcurl)"
export CURL_LIBS="$(pkg-config --libs libcurl) -Wl,-rpath,/usr/local/lib/curl-8.15.0/lib -Wl,-rpath,/usr/local/lib/openssl-1.1.1w/lib"
export CPPFLAGS="-I/usr/local/lib/curl-8.15.0/include -I/usr/local/lib/openssl-1.1.1w/include ${CPPFLAGS}"
export LDFLAGS="-L/usr/local/lib/curl-8.15.0/lib -L/usr/local/lib/openssl-1.1.1w/lib ${LDFLAGS}"

PHP8.3.25のインストール

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

OPcacheの設定 (公式のデフォルトで設定)
http://php.net/manual/ja/opcache.installation.php
# sed -i -e "s/^;opcache.memory_consumption=/opcache.memory_consumption=/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^;opcache.interned_strings_buffer=/opcache.interned_strings_buffer=/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^;opcache.max_accelerated_files=/opcache.max_accelerated_files=/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^;opcache.revalidate_freq=/opcache.revalidate_freq=/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
# sed -i -e "s/^;opcache.enable_cli=/opcache.enable_cli=/g" /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini

vi /usr/local/lib/php-$PHP_VERSION-mysqlc-$MYSQL_TITLE/php.ini
opcache.fast_shutdown=1
が無いと思うので [curl] の上あたりに追記する
# 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-8.3.25-mysqlc-mysqlnd/php.ini

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

バージョン

php-8.3.25-mysqlc-mysqlnd -v
PHP 8.3.25 (cli) (built: Aug 31 2025 23:39:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.25, Copyright (c) Zend Technologies