CoreServer(V1)のFastCgi版 PHP 7.4/8.0 に拡張モジュール XMLReader をインストールし、WordPressの hpb Dashboard プラグインを利用可能にした

update 最終更新日:2023年2月21日 at 1:05 PM

ジャストシステム提供のホームページビルダー(hpb)のWordPress ダッシュボード・プラグイン(hpb Dashboard)は、PHP の「XMLReader」の拡張モジュールが必須となります。
もし、XMLReader がインストールされていないサーバーで、hpb のダッシュボードを選択すると致命的エラーが発生します。
コアサーバー(V1)で、このモジュールが使用出来るのは PHP 7.1 のみとなっているため、これまでは、やむを得ず PHP 7.1 で運用していました。

しかしながら、PHP 7.1 はセキュリティサポートが終了しており、現在の WordPress(執筆時点ではバージョン5.7.2)の推奨スペックは PHP 7.4 以上となっています。
以下の画面は、WordPress のサイトヘルス、ならびに、プラグイン BackWPup からの通知です。
サイトヘルスでは、致命的な問題として、BackWPup からは PHP 7.2 未満のサポートを打ち切るとのアラートが来ています。具体的には、以下のような脅しの文言です。

そこで、今回は以下リンク先に書かれたSkinerv さんのブログを参考に PHP7 の最新バージョン「PHP7.4.20」をビルドし、CoreServer(V1) の FastCgi 版 PHP 7.4 に XMLReader(+XMLWriter) のモジュールを適用させることで、サーバーの環境をアップグレードすることにしました。

Skinerv さんには絶大な感謝を申し上げたいと存じます!
なお、コアサーバーをV2へアップグレードし、PHP7.4で運用する選択肢がベストかもしれませんが、V1の契約が未だ1年弱残っているため、当面、V1で運用したいと考えております。


1. PHP 7.4 の互換性チェック

PHP のバージョンを上げる前に、先ずは WordPress システムのバックアップを取っておきます。
次に、テーマと全てのプラグインが PHP 7.4 への互換性があるかどうかをチェックします。
今回は、WordPressプラグイン「PHP Compatibility Checker」を使用しましたが、残念ながら、このプラグインでは PHP 7.3 までのチェックしか出来ません。
しかし、PHP 7.3 の環境で動けば、多分、PHP 7.4 でも動作可能と思われますので、とりあえず、トライしてみます。問題があればプログラムを修正するか、プラグインの交換や削除での対処となります。
以下の画面の通り、一部のプラグインにワーニングはありますが、致命的なエラーは無いため、特に問題は無いようです。但し、ランタイム時の動作はチェックできませんので、注意は必要です。

2. PHP 7.4 のダウンロードとビルド

コアサーバーにおいて、稼働中の PHP 7.4(FastCgi版)へユーザー権限で拡張モジュールを追加するためには、以下の方法で実現可能なようです。

  • Makeコマンドの実行により PHP 7.4 のソースからコンパイルし、標準でインストールされた PHP とは別のディレクトリへ PHP のシステムを構築し、稼働中の PHP 7.4 へ拡張モジュールを組み込む

多少イレギュラーな方法ではありますが、今のところ問題なく動作しているようです。
以降、3章までは、Skinerv さんのブログに書かれている内容の引用となります。

※ご注意: 以下の方法は、CoreServer ではサポート対象外であるため、当方は一切の責任は負いかねます。あくまでも、自己責任で行って下さい。USERNAME はアカウント名に置き換えて下さい。

先ず、以下のサイトにて、PHP 7.4 の最新ビルドを調べます

執筆時点(2021年6月12日)では、PHP 7.4 の最新バージョンとして「PHP 7.4.20」が配布されていることが確認できました。

Tera Term にて、コアサーバーへ SSH 接続し、以下の Linux コマンド(Bash)を順に実行します。
なお、以下に記述した configure スクリプトファイルの実行についてですが、オプション “–with-zip=shared –with-gmp=shared” は、必要の無い方は省略してOKです。

cd
mkdir php_selfbuild
cd php_selfbuild
wget https://www.php.net/distributions/php-7.4.20.tar.gz
tar zxvf *
rm *.gz
cd php-7.4.20
./configure --enable-xmlreader=shared --enable-xmlwriter=shared --with-zip=shared --with-gmp=shared
make


make が成功すると、以下の画面が Tera Term に表示されます。
2枚目の画面は、アイキャッチと同じ画像ですが、PHP 7.4 のビルドがちゃんと出来ているかどうかを確かめるため、生成されたディレクトリを表示させたものです。

3. PHP モジュールの適用

/virtual/USERNAME/public_html/.fast-cgi-bin/php74.ini に以下2行を追加します。
* FTPからだと、public_html ⇒ .fast-cgi-bin ⇒ php74.ini

なお、 Skinerv さんのブログには、更に2個の拡張モジュール zip.so, gmp.so を入れ計4行の追加ですが、当サーバーでは必要ないため、とりあえず、xmlreader.so, xmlwriter.so を追加することにします。

extension=/virtual/USERNAME/php_selfbuild/php-7.4.20/ext/xmlreader/.libs/xmlreader.so
extension=/virtual/USERNAME/php_selfbuild/php-7.4.20/ext/xmlwriter/.libs/xmlwriter.so


PHP OPcache(Zend OPcache)が適切に設定されていないそうなので、設定値をチューニングします。

/virtual/USERNAME/public_html/.fast-cgi-bin/php74.ini を以下のように編集します。

1) opcache から始まる行を削除

2) 以下を追加

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1


《 スクリプトが消費する最大メモリ値の変更 》

今回のインストールには直接関係ありませんが、念のためデフォルト 500M を 2GB へ変更しておきます。
ちなみに、コアサーバー(V1)のスペックによるとメモリは最大 384GB であり、Skinerv さんがコアサーバーのサポートへ確認した推奨値は 2GB だそうです。
以下の記述で “2G” と定義することは可能なはずですが、Transposh プラグインでメモリー値定義のワーニングが表示されたため、単位をM(メガ)にしています。

memory_limit = 2048M    ; Maximum amount of memory a script may consume (8MB)


4. CoreServer に PHP 7.4 を適用

コアサーバーの管理画面へログインし、サイト一覧より php74 を適用させます。

5. 動作確認

phpinfo関数にて、XMLReader ならびに XMLWriter が有効になっていることが確認できます。以下の画面は、phpinfo を表示するための php プログラム(phpinfo.php)で表示させたものです。*

* phpinfo.php は以下のように記述します。

<?php
phpinfo(INFO_MODULES);
?>


以下のように、PHP 7.4 の環境で無事に hpb ダッシュボードが開くようになりました。


以下は、PHP 7.4 を適用後のサイトヘルスの画面ですが、WordPress の推奨モジュール imagick がインストールされていないという指摘です。PHP 7.1 には、imagick がインストールされていますが、残念ながら、コアサーバー(V1) の PHP 7.4 には拡張モジュールがインストールされていません。

しかし、PHP 7.4 のパッケージには標準で GD モジュールがインストールされているため、imagick が無くても WordPress の動作は可能です。
imagick があると、PDF ファイルからサムネイルを生成したり、より高度な画像処理が実現できるようになるらしいのですが、当サイトではあまり必要性はないと思います。よって、このワーニングは無視することにします。
なお、imagick のインストールはかなり面倒であり、またセキュリティに関しての脆弱性の問題もあるため、imagick のサポートは当面保留にしたいと思います。


参考までにですが、phpinfo にて、PHP 7.4 における GD モジュール の構成を以下に示します。


2021.06.16 追記

PHP 8.0 について

この章では、実験として PHP 7.4 の時と同様の方法により、以下の Linux コマンドで最新版の PHP 8.0 をビルドしました。
拡張モジュールは、xmlreader と xmlwriter を組み込みました。

cd php_selfbuild
wget https://www.php.net/distributions/php-8.0.7.tar.gz
tar zxvf php-8.0.7.tar.gz
rm *.gz
cd php-8.0.7
./configure --enable-xmlreader=shared --enable-xmlwriter=shared
make

また、PHP モジュールを適用するため、
/virtual/USERNAME/public_html/.fast-cgi-bin/php80.ini に以下2行を追加しました。

extension=/virtual/USERNAME/php_selfbuild/php-8.0.7/ext/xmlreader/.libs/xmlreader.so
extension=/virtual/USERNAME/php_selfbuild/php-8.0.7/ext/xmlwriter/.libs/xmlwriter.so

以上の設定で、コアサーバーのサイト設定にて、PHP 8.0 を適用し、Webサイトへアクセスしたところ、「サイトに重大なエラーが発生しました」が表示されましたので、PHP 8.0 では素直には動かないようです。
未だログを調べていないので、詳しい原因は分かりませんが、テーマやプラグインが PHP 8.0 と非互換か、若しくは、拡張モジュールの指定が不正と判断されているかのどれかだと思います。
いずれにしても、PHP 7.4 から PHP 8.0 への移行は、以下のリンク先記事に示す通り、非互換項目が多すぎるため、かなりハードルが高いようです。

その後、WordPress のデバックモードでログを確認したところ、プラグインにエラーが発生している事が判明しました。恐らく、PHP 8.0 拡張モジュールについては問題ないと思います。
エラーを起こしているプラグインは以下の通りです。

  • custom-more-link-complete … WordPress 5.7.2 では機能していないため、プラグインを削除
  • transposh-translation-filter-for-wordpress … 作者へ PHP 8.0 への対応を依頼予定
  • invisible-recaptcha … メンテナンスがされておらず正常に機能していないようなので、プラグインを削除し、「reCaptcha by BestWebSoft」への代替を実施
  • wp-database-backup … リストア機能が不完全。また BackWPup があり、必要性がないのでプラグインを削除
  • PHP Compatibility Checker … PH P8.0 との非互換が指摘されているので削除


2021.06.21 追記
以下の WordPress フォーラムに Jetpack の不具合について報告しました。
その主な不具合は、Jetpack のサイトアクセラレータを有効にしても CDN が機能せず、画像が表示されないことなどです。
恐らく、原因はコアサーバーのセキュリティ制御により、Automattic 社から送受信されるIPアドレスに制限が掛けられているのではないかと思われます。
コアサーバーのアクセス制限は自動的に行われるそうなので、根本的な解決は難しく、コアサアーバーにおいて、Jetpack の全ての機能を利用するのは無理なようです。



以下は、コアサーバー・サポートからの回答です。

日頃より弊社サービスをご愛顧くださり、ありがとうございます。
お問い合わせの件について案内させていただきます。

弊社担当部門にて確認いたしましたところ、ご連絡の「192.0.64.0/18」のIPアドレスの範囲でいくつかのIPアドレスが弊社サーバー側で拒否され接続制限が実施されている状況でございました。

上記制限は担当部門にて解除しております。

しかしながら、弊社ではサーバーの高負荷等の原因となっている接続元IPアドレスを自動的に拒否するといったセキュリティ機構がございます。

そのため、再度対象のIPアドレスからの接続を拒否する場合がございますが、セキュリティ上、上記制限実施を停止するといったことはできかねますことを何卒ご了承いただきますようお願いいたします。

その他ご不明な点がございましたら、お気軽にお問い合わせください。
今後とも弊社サービスをよろしくお願い申し上げます。
日頃より弊社サービスをご愛顧くださり、ありがとうございます。
お問い合わせの件について案内させていただきます。

カスタマーサポートアンケート -バリュードメイン-
https://forms.gle/ALokqBu4ws9e4v4Z6


2021.06.24 更新
昨日、以下の通りホスティング会社であるコアーサーバーより、以下の連絡がありました。

この度弊社にて実施いたしました対応は、WordPress に対するブルートフォースアタックが疑われる挙動の接続元IPアドレスに対する制限等、IPアドレスによる制限全ての解除を実施しております。

カスタマーサポートアンケート -バリュードメイン-
https://forms.gle/ALokqBu4ws9e4v4Z6


そこで、Jetpack の動作確認を行いました。
その結果、コアサーバーについて、以下の不具合が解消されたことを確認しました。

  1. Jetpackの拡張モジュールのON/OFFを行うと “Status 400” のエラーが発生する
  2. サイトアクセラレータ(CDN)が機能しない
  3. なお、以下のように、Jetpack の「既知の問題‎」をチェックしたところ、「Google Captcha (reCAPTCHA) by BestWebSoft」が当Webサイトに該当することが判明しました。

2022.05.02 追記
以下の記事の通り、 CORESERVER V1 において、システムの増強および、新仕様のサーバーへマイグレーションが行われることになりました。新サーバーについては、「全プランに最新システム、最大64コアの高速CPU、最大1TBの大容量メモリー、高速SSD RAID」を採用し、より高速化と安定稼働が可能となります。併せて、PHPのバージョンも7.1から7.4へバージョンアップします。

よって、新サーバーへの移行後は、PHP 7.4 をお使いの方は、ご自身で PHP の「XMLReader」拡張モジュールのインストールは必要で無くなるのかと思います。

2022.06.06 追記 / 6.30 更新
以下の記事に示す通り、コアサーバー(V1) の新サーバーへのマイグレーションの影響で、Perl 5.26 に非互換が発生し、古い CGI プログラムがエラーを起こした為、急遽メンテナンスを行いました。
なお、拡張モジュール XMLReader, XMLWriter, imagick などが新サーバーにインストールされていました。


このエントリーをはてなブックマークに追加
X(ポスト)

コメントを残す