WordPressサイトのサーバー移行は、「ファイルとデータベースをそのままコピーすれば終わり」というイメージを持たれがちですが、サーバーのOSサポート終了が理由での移行では、PHPのバージョンが一段階も二段階も上がることが多く、そこで思わぬ不具合が出ることがあります。今回は、全328ページのWordPressサイトを、稼働中の本番環境に影響を与えずに新サーバーへ移行した事例をもとに、実際に起きた不具合と直し方を解説します。
実際にあったご相談内容
サーバーのOSサポート終了に伴う移行で、PHP7.4(サポート終了)からPHP8系への移行が必須という状況でした。全328ページの規模で、本番サイトは旧サーバーで稼働を続けたまま、新サーバー側で移行作業を行い、最終確認が取れてからDNSを切り替えるという進め方です。作業中に本番へ影響が出ないという点が、依頼元にとって重要なポイントでした。
PHP8移行で実際に出た不具合
ファイル一式とデータベースを移行したうえで新サーバーにアクセスすると、まず「重大なエラー」画面が表示されました。デバッグモードを有効にして原因を追うと、PHP8で廃止・変更された記法がテーマやプラグインの複数箇所に残っていたことが分かりました。
- create_function()の廃止:PHP7時代に書かれたウィジェット関連のコードで多用されていた関数がPHP8で完全に削除されており、該当箇所を含むファイルが軒並みFatal Errorに
- PHP4形式コンストラクタの非サポート:クラス名と同じ名前のメソッドを旧式のコンストラクタとして扱う書き方がPHP8では効かなくなり、カスタム投稿タイプ関連のウィジェットが初期化されない
- 波括弧での文字列配列アクセスの廃止:$string{0}のような書き方がPHP8で構文エラーになり、パーマリンクをカスタマイズするプラグインが動作不能に
「とりあえず無効化」で終わらせないこと
エラーを止めるだけなら、該当プラグインやファイルを無効化してしまうのが一番早い方法です。実際、最初の表示確認の段階では一時的に無効化して動作を止めました。ですが、無効化したままにすると、サイドバーのウィジェットが消えたり、SNSシェアボタンが表示されなくなったりと、見た目には気づきにくい形で機能が欠けたまま本番公開してしまうリスクがあります。
この案件では、無効化したままにせず、該当コードをPHP8の書き方(create_function()をクロージャに、PHP4形式コンストラクタを__construct()に)へ実際に書き換えて再度有効化しました。手間はかかりますが、移行前と同じ見た目・機能を保ったまま新サーバーへ移せるかどうかは、ここで決まります。
全ページの動作確認と404チェック
表示確認ができたら終わり、ではありません。パーマリンクをカスタマイズするプラグインを一時的に無効化していた影響で、クローラーで全ページを巡回すると44ページで404エラーが検出されました。原因はプラグインを無効化していた間にリライトルールが失われていたことで、プラグインの修正・再有効化とあわせてリライトルールを再生成することで解消しています。最終的に全453ページ(サブページ含む)がすべて200または正常なリダイレクトになることを確認してから、本番切り替えに進みました。
- 全ページをクローラーでチェックし、404・意図しないリダイレクトが無いか確認する
- お問い合わせフォームなど、実際に動作させないと分からない機能はテスト送信まで行う
- サイドバー・シェアボタンなど、見た目に関わる部分も移行前とスクリーンショットで比較する
サポート終了サーバーからの移行、PHPバージョンアップに伴う不具合修正など、既存WordPressサイトの延命・移行もZEROVENTUREにご相談ください。