コアサーバー V1 の新サーバーへのマイグレーションと Perl 5.26 非互換、 PHP 7.4 非推奨問題の解決

update 最終更新日: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
このエントリーをはてなブックマークに追加
X(ポスト)

コメントを残す