PHP のアップデートは、多くの Web アプリケーション、特に WordPress での要件となっています。
しかし、CentOS6 のような古い OS を使用している場合、標準の手段ではアップデートが難しい場合があります。
この記事では、そんな課題を解決するための具体的な手順を提供します。
警告
PHP7.4 は 2022 年 11 月 28 日にサポートが切れているので利用する場合は暫定的な対応として利用してください。
本来は OS を新しいものに変えてサポートされた状態で使うことが望ましい対応です。
一部のステップで--no-check-certificate
などセキュリティレベルを下げる操作を含みます。
利用する際には内容を理解した上で実行してください。
検証環境と条件
- CentOS 6.7
- Apache 2.2.15 (BASErepo)
- PHP 7.3 (remirepo)
- PHP-7.4.33(source)
- PHP はモジュールモードで駆動させる
- デフォルト状態の WordPress が動けば良いこととする
PHP7.4.33 のソースコードのダウンロード
ソースコードは git からダウンロードするか公式サイトからダウンロードする。
git のソースコードを使うとbison
のバージョンが古いと怒られるので今回は公式サイトからダウンロードした。
configure: error: bison 3.0.0 or later is required to generate PHP parsers (excluded versions: none).
php の公式サイトのソースコードはパーサーコードが含まれているためbison
が必要ない。
CentOS6 では Let’s Encript のルート証明書がないため --no-check-certificate
のオプションをつけて証明書チェックを無効化する。
wget https://www.php.net/distributions/php-7.4.33.tar.gz --no-check-certificate
PHP7.4.33 のビルド準備
ビルドのために必要なものを yum からインストールする。 yum が動かないときはこの記事を参照( https://sakakinox.net/posts/p2/ )
yum install httpd-devel libxml2-devel curl-devel
PHP7.4.33 をビルドする
./configure のコマンドは下記
./configure --prefix=/opt/php74 --with-apxs2=/usr/sbin/apxs --with-json --enable-mbstring --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-onig --enable-xml --with-libxml-dir --with-mysql-sock --without-sqlite3 --without-pdo-sqlite --with-zlib --with-curl
今回は/opt/php74 に設置するため--prefix=/opt/php74
SqLIte のバージョンが CentOS6 では 3.6.20 が入っているが PHP7.4.33 が Sqlite3.7.4 以上を要求してくる。
Wordpress では不要なので除外する。--without-sqlite3
--without-pdo-sqlite
./configure 実行時にonigruma
がインストールされているが検出されない。
checking for oniguruma... no
configure: error: Package requirements (oniguruma) were not met:
No package 'oniguruma' found
rpm -qa |grep onig
oniguruma5php-6.9.6-1.el6.remi.x86_64
oniguruma-5.9.1-3.1.el6.x86_64
oniguruma-devel-5.9.1-3.1.el6.x86_64
oniguruma.pc が見つからなかったためソースからビルドする。
CentOS 6でもonigurumav6.9.8
をビルド可能
#phpのディレクトリから出る
cd ../
wget https://github.com/kkos/oniguruma/archive/refs/tags/v6.9.8.zip
unzip v6.9.8.zip
cd oniguruma-6.9.8/
autoreconf -vfi
#すでにパッケージ版があるので別ディレクトリにインストール
./configure --prefix=/opt/oniguruma
make
make install
## libをロードする
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/oniguruma/lib/pkgconfig
PHP をビルドする
#onigurumaディレクトリから出る
cd ../
tar zxvf php-7.4.33.tar.gz
cd php-7.4.33
./configure --prefix=/opt/php74 --with-apxs2=/usr/sbin/apxs --with-json --enable-mbstring --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-onig --enable-xml --with-libxml-dir --with-mysql-sock --without-sqlite3 --without-pdo-sqlite --with-zlib --with-curl
make
make install
/opt/php74/bin/php -v
PHP 7.4.33 (cli) (built: Aug 16 2023 16:53:02) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
Apache で利用する
--with-apxs2=/usr/sbin/apxs
を追加すると下記の path で SharedObject が作成される
/etc/httpd/modules/libphp7.so
apache の conf を修正する。
vim /etc/httpd/conf/httpd.conf
#既存のモジュールをコメントアウトして1行追加する。
#LoadModule php7_module /usr/lib64/httpd/modules/libphp7.so
LoadModule php7_module modules/libphp7.so
#Apacheを再起動する。
/etc/init.d/httpd restart
Module を追加したいとき
./configure 追加したいモジュールを追加して make and make install する。 apache の再起動をする。
#new_moduleにモジュール名を追加する。
./configure --prefix=/opt/php74 --with-apxs2=/usr/sbin/apxs --with-json --enable-mbstring --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-onig --enable-xml --with-libxml-dir --with-mysql-sock --without-sqlite3 --without-pdo-sqlite --with-zlib --with-curl --with-new_module
make
make install
/etc/init.d/httpd restart
参考
おしまい