最終更新日:2023年12月16日 at 10:33 PM
本サイトは、レンタルサーバー GMO Digirock 社のコアサーバー(V1)にて、 Senri が管理運営しております。この度、このサーバーが以下の通り、新サーバーへのマイグレーションが決定し、より高性能なサーバーへのシステム移行が完了しました。
コアサーバーは、全プランに最新システム、最大64コアの高速CPU、最大1TBの大容量メモリー、高速SSD RAIDを採用することで優れた安定性と速度を実現し、無料SSL・HTTP/3・TLS1.3にも対応しています。
マイグレーションにおける主な変更点は以下の通りです。
- CPU 最大28コア ⇒ 最大64コア
- メモリー 最大384GB ⇒ 最大1TB
- PHP(デフォルト) 7.1 + FastCGI + OPcache + APCu(5.3/5.4/5.5/5.6/7.0FastCGI選択可) ⇒ 7.4+ FastCGI + OPcache + APCu(5.6/7.0/7.1/7.2/7.3/8.0/8.1FastCGI選択可)
- Perl(デフォルト) 5.16系 ⇒ 5.26系
- MySQL(デフォルト) 5.7 ⇒ MariaDB 10.6
上記の通り、Webサーバーがハイスペックとなった事で、Webサイトの表示が飛躍的に速くなりました。これは大変喜ばしい事なのですが、新サーバーへのマイグレーションに伴い一部のCGIプログラムが動作しなくなりました。
PHPに関しては、既に PHP 7.4 に対応済みであるため、問題はありませんでしたが、 Perl に関しては油断していました。Perl は、アクセスカウンタやアクセス集計、掲示板、ランチャーなどの CGIプログラムが動作しています。
調査したところ、当サイトでの Perl 5.26 に関する非互換箇所は、以下の通りでした。いずれも、 500 ERROR が発生します。
- セキュリティ問題により、カレントディレクトリを示す以下の表記がエラー扱いになる
$thisfile = ‘./cgi.cgi’; - 日本語変換ライブラリ jcode.pl が Perl 5.26 で動作しない
require ‘./jcode.pl’;
この問題に関しては、それぞれ以下のように対応することで解決しました。
カレントディレクトリの指定
以下の1行を追加します。
use lib ".";
$thisfile = './cgi.cgi';
jcode.pl の非互換問題
jcode.pl に代わる日本語変換ライブラリ jacode.pl を導入し、以下のように呼び出し部分を変更する。
jacode.pl の最新版は、jacode-2.13.4.18 よりダウンロードできます。
require './jacode.pl';
# JISコード変換
jacode::convert(\$mbody,'jis','sjis');
以上、取りあえず、表面上の表示は正常になりましたが、未だ、全プログラムの検証は終えていないため、引き続きテストを行っていく予定です。
新サーバーへのマイグレーションで絵文字など、4Bコード(utf8mb4)を含む記事を更新するとエラーになる件
2022.06.10 追記
新サーバーへのマイグレーション後、絵文字などの4Bコード(utf8mb4)を含む記事を更新すると、以下のエラーが出て記事が更新できなくなりました。
更新に失敗しました。データベースの投稿を更新できませんでした。
こちらで何度か、DBの修復を試みましたが、上手くいきませんでした。
止むを得ず、コアサーバーのサポートへ連絡し、マイグレーション前のDBで修復を依頼しました。しかし、結果は NG でした。
そこで、色々と試行錯誤したところ、以下の方法で無事、DBの修復ができました!
絵文字を入力し、更新もできるようになりました。
1.「phpMyAdmin」にログイン ⇒ 変更したいデータベース名を選択
2.ヘッダーの「操作」タブを選択 ⇒ 「照合順序」と書かれている箇所を見る。
3.照合順序で “utf8mb4_general_ci” を指定し「実行」をクリック
* 本件につきましては、以下の WordPress サポートフォーラムにもトピックをアップしておりますが、検証後、問題がないようでしたら、このスレッドはクローズする予定です。
* 対応する記事は、以下の通りです。
2022.06.30 追記
PHP 7.4 非推奨 / PHP 8.0 非互換問題
以下の記事へ加筆した内容を再掲します。
WordPress プラグインの中で、PHP 7.4 で非推奨、PHP 8.0 で廃止される関数が見つかりました。
PHP 7.4 の環境において、デバッグモードで実行した際、以下のワーニングを確認しています。
[28-Nov-2021 05:19:48 UTC] PHP Deprecated: join(): Passing glue string after array is deprecated. Swap the parameters in /**********/public_html/www.senris.com/*****/wp-content/plugins/hpbseo/hpbseo.php on line 517
これは、hpbseo.php で記述された join() 関数の使用法が非推奨との事です。
該当箇所は2か所ありますが、これは以下のように記述されています。
//エラーメッセージ取得
$err_msg = join($err_tmp,'<br />');
この join() 関数 は、implode() のエイリアスですが、上記の形式は、PHP 7.4 で非推奨とされ、 PHP 8.0 では仕様から削除されています。よって、この部分は以下のように修正します。
//エラーメッセージ取得
//$err_msg = join($err_tmp,'<br />');
$err_msg = join('<br />',$err_tmp); // for PHP 8.0