PHP2Shellの脆弱性をきっかけとしたPHPのバージョンアップのご依頼は、いまも当社に寄せられています。第1弾の記事では、14サイトへの対応をもとに「PHP 8で壊れるコード」を中心に取り上げました。その後の2026年10月23日夜〜25日に対応した案件で目立ったのは、PHPそのものよりも、その周辺で作業が行き詰まるケースです。

先に結論をお伝えすると、サーバーの設定やデータベース、プラグインの仕様変更、メールの認証には、手元の検証だけでは見つからない問題があります。この記事では、実際に発生した10の事例を「本番だけで起きた問題」「更新で見た目・動きが変わった問題」「メールが届かない問題」に分け、原因と直し方を紹介します。費用や提案にあたっての判断は、費用・判断編にまとめました。

PHPバージョンアップ後に起きたトラブルの一覧

起きたこと 原因 分類
データベース接続確立エラー データベースのパスワードが旧方式、MySQLが5.1 本番だけ
管理画面に「更新」ボタンが無い wp-config.php の DISALLOW_FILE_MODS 本番だけ
本体の更新が「cURL error 60」で失敗 WordPress同梱の証明書リストが2019年のまま 本番だけ
メンテナンスモードのまま止まる 更新の途中で処理が止まり、.maintenance が残った 本番だけ
地図が消えた・隠した料金表が見える ACF 6.2.5以降のHTMLの除去 仕様変更
FAQページが404 Ultimate FAQs 2.xで本体ファイル名が変わり停止 仕様変更
フォームの間隔が広がる Contact Form 7 6系の自動の段落分け 仕様変更
日付選択のカレンダーが崩れる 読み込み先にjQuery UI 1.14.2が無く404 仕様変更
サイト全体が真っ白 PHP 8.1で予約語になった readonly をクラス名に使用 PHP
フォームのメールが届かない 送信元の認証(SPF・DKIM)が無い 以前から

手元の検証では見えない「本番サーバーだけの問題」

当社では、本番の複製を手元に用意し、検証を済ませてから作業に入ります。ただし、バックアップに使用するAll-in-One WP Migrationには、wp-config.php が含まれません。サーバー固有の接続設定やサーバーからの通信に関する問題は、本番で切り替えるまで分からないのです。

PHPを上げたら「データベース接続確立エラー」(ロリポップ)

本番でPHP 5.3(2014年にサポート終了)を使っていたサイトでは、PHPを7.4に切り替えた瞬間、「データベース接続確立エラー」が発生しました。調べると、古いデータベースのパスワードが旧方式(old_password)のままになっていました。この方式は、新しいPHPの接続部品では受け付けられません。ロリポップの管理画面にも、その注意書きがありました。

加えて、データベースはMySQL 5.1でした。WordPress 6.5以降にはMySQL 5.5.5以上が必要なため、パスワードを直すだけではWordPressを最新にできません。PHPを5.3へ戻すとすぐに復旧しましたが、解決するには「新しいデータベースを作って移す」必要があると判断しました(このサイトのその後については費用・判断編で紹介しています)。

最短で復旧させるには、PHPを切り替えた直後にエラーが出たら、まずPHPを元の版に戻すことです。データベース接続確立エラーの一般的な原因や直し方については、こちらの記事で解説しています。

管理画面に「更新」ボタンが無い(DISALLOW_FILE_MODS)

プラグインを追加できず、WordPress本体も更新できないサイトがありました。原因となっていたのは、wp-config.php に記載された DISALLOW_FILE_MODS という設定です。サイトの制作者が、誤操作を防ぐ目的で入れていたものでした。

この設定によって、WordPressの自動のセキュリティ更新も止まります。今回最新にしても、その後はまた古くなってしまいます。そこで、ご依頼者への報告では「今後の更新を誰が担当するか」を決めていただくようお願いしました。また、このサーバーはFTPの接続先が /wp-content に固定されており、wp-config.php を確認できない状態でした。FTPの設定を一時的に「全てのフォルダ」へ変更し、作業後に元へ戻しています。

WordPress 5.1の本体更新が「cURL error 60」で失敗

WordPress 5.1を使っていたサイトでは、本体を更新しようとすると「cURL error 60: SSL certificate problem」で失敗しました。同梱されている証明書リストが2019年のままで、現在のwordpress.orgの証明書を信頼できなかったためです。最新の証明書リストで1ファイルを上書きするとダウンロードは通ったものの、続いて「ダウンロード中…」の表示で止まりました。最終的には、FTPを使って本体のファイルを手作業で上書きしています。

FTPでのアップロードにも問題があり、3,000ファイルのうち733ファイルが「サーバーから切断」で失敗しました。FileZillaで失敗した転送をキューへ戻し、同時転送数を1〜2に下げたところ、転送できました。ほかにも、プラグインの更新処理が途中で止まり、サイトが「メンテナンスモード」から戻らなくなったことがあります。この場合は、サイト直下にある .maintenance ファイルを削除すると復旧します。

PHPの切り替えが、同じサーバーの全サイトにかかる

ロリポップやエックスサーバーではドメインごとにPHPを選択できます。一方、さくらのレンタルサーバーで対応したケースは、アカウント内の全サイトが切り替えの対象でした。そのアカウントには、10年近く更新されていないWordPress 4.5〜4.9のサイトが9つ同居していました。そのため、PHPを上げる前に、それらのサイトをどうするかをご依頼者に決めていただく必要がありました。

更新したら見た目・動きが変わった(プラグインの仕様変更)

PHPのバージョンを上げると、それまで更新できなかったプラグインもまとめて最新にすることになります。何年分かの仕様変更が一度に反映されるので、エラーが出ていなくても見た目や動きが変わる場合があります。

ACF 6で地図が消え、隠していた料金表が見えた

更新後にご依頼者から寄せられたのは、「隠していたはずの料金表が見える」「地図が消えた」というご連絡でした。原因は、Advanced Custom Fields(ACF)の6.2.5以降で行われた変更です。テンプレートの the_field() は、安全のため、iframeやHTMLのコメントを除去して出力する仕様になりました。その結果、Googleマップの埋め込みが消え、コメントで隠していた部分は記号が崩れて、中身が見える状態になっていました。

データ自体は残っていました。そこで、使用中の入力欄に限ってHTMLの出力を許可するフィルターをテーマへ追加し、表示を元に戻しました。影響が出ていたのは1ページだけではなく、同じ作りのすべてのページです。

プラグインを更新したら、勝手に停止した

Ultimate FAQsを1.xから2.xへ更新すると、本体のファイル名が変わったことで、更新と同時に「停止」の扱いとなり、FAQページが404になりました。再有効化してパーマリンクを再保存すると復旧し、2.xで変わった見た目については追加CSSで元に戻しています。こうした停止は、更新の前後で「有効なプラグインの一覧」を見比べることで、すぐに気づけます。

Contact Form 7の6系でフォームの間隔が広がった

Contact Form 7の6系では、フォームの項目名や入力欄、表組みの各セルが、自動的に段落へ分けられるようになりました。表組みを使ったフォームでは、その影響でページの高さが100px以上伸びました。元の間隔に戻すには、追加CSSを1行加えれば対応できます。なお、最新版にはPHP 8.3以上が必要なため、PHPを上げるまでは更新の候補に表示されません。

お問い合わせフォームのカレンダーが崩れた

MW WP Formの日付選択に使うカレンダーの表示が崩れている、とのご指摘がありました。見た目を整えるCSSをGoogleの配信サーバーから読み込む構成でしたが、そこにはWordPress 7に同梱されたjQuery UI 1.14.2のファイルが無く、404になっていました。表示の崩れは今回の作業で起きたものではなく、それ以前にWordPress 7へ更新した時点から続いていました。読み込み先をjQuery公式の配信サーバーへ変更して解消しています。

同じサイトでは、確認画面に英語の文字が表示されるとのご指摘も受けました。その文字はPHPの警告文で、テーマにある迷惑メール対策の処理が、存在しない値を参照していました。PHP 7.4では表に出なかった「注意」が、PHP 8では「警告」に格上げされ、画面に表示されたものです。

PHP 8.1の予約語で、サイト全体が真っ白に

文字にマーカーを引くプラグインが、PHP 8.1で予約語となった readonly をクラス名に使用しており、サイト全体が真っ白になりました。すでに配布は終了していて更新版が無く、218記事で使われているため削除することもできません。クラス名を変更して動作するようにしたうえで、将来的には別の方法へ置き換えることをご提案しました。

「メールが届かない」はサイトの問題とは限らない

更新を終えたサイトで、「フォームのメールが届かない」とご連絡をいただきました。フォームには「送信されました」と表示されています。サーバーの送信記録を確認したところ、外部のアドレス宛てに送信されていました。つまり、WordPressとフォームは正常に動いています。

原因がはっきりしたのは、届いていたメール(Yahoo!メールの迷惑メールフォルダ)のヘッダーを確認したときです。配送上の差出人(Return-Path)がサーバー名のままで、SPFもDKIMも無い状態になっていました。Yahoo!メールには「このメールには認証情報がありません」と表示され、Gmailでは受け取りが拒否されていました。

この設定は以前からのもので、更新との関係はありません。本来の送信先は同じサーバー内のアドレスだったため届いており、テストで外部のアドレスへ変更したことで問題が分かりました。さらに、先方で導入したWP Mail SMTPは設定が空のまま、差出人をGmailのアドレスに上書きしていました。そのため、かえって「なりすまし」と判定されやすい状態になっていました。

「届かない」との連絡を受けたら、まず送信記録とメールのヘッダーを確認し、サイトの問題なのか、受け取る側の認証の問題なのかを切り分けます。認証まで修正するかどうかについては、担当の方が実際に困っているかどうかも踏まえ、ご依頼者に判断していただきました。

ここまでのまとめ

PHPのバージョンアップを進めると、PHPのコードだけでなく、サーバーの設定・古いデータベース・何年分かのプラグインの仕様変更・メールの認証に関する問題が一度に表面化します。手元の検証でコードの問題を解消できても、本番で切り替えた直後の確認と、すぐに元へ戻せる準備は欠かせません。

ここからは、制作・保守を担当する技術者向けに説明します。

技術者向け:直し方のメモ

ACF 6.2.5以降でiframeやコメントを出力する

ACFの the_field() は、6.2.5以降、HTMLを安全な形に整えてから出力します。iframeを含む入力欄を元どおりに表示するには、acf/the_field/allow_unsafe_html フィルターを使用します。安全のため、すべての入力欄で許可するのではなく、必要な欄の名前に限定してください。

上記の map_embed と price_note は例なので、実際に使用している入力欄の名前へ置き換えてください。あわせて、その入力欄を編集できる人が限られていることも確認しておきます。

そのほかの確認ポイント

  • wp-config.php の DISALLOW_FILE_MODS が true の場合、管理画面からの更新・追加に加え、自動更新も止まる
  • WordPress 6.5以降にはMySQL 5.5.5以上が必要。PHPを上げる前に、データベースの版も確認しておく
  • All-in-One WP Migrationのバックアップには wp-config.php が含まれない。本番の接続設定は別に控える
  • 更新が「メンテナンスモード」のまま止まった場合は、サイト直下にある .maintenance を削除する
  • readonly に加え、PHP 8.0では match が予約語になった。古いプラグインのクラス名・関数名に注意する
  • メールが届かない場合は、受信したメールのヘッダーから Return-Path、SPF、DKIM の結果を確認する

よくある質問

Q. PHPを上げたらサイトが表示されなくなりました。どうすればいいですか?

最初に、サーバーの管理画面からPHPを元の版へ戻してください。今回のデータベース接続確立エラーも、PHPを戻すとすぐに復旧しました。原因の調査は、サイトを元に戻したあとで大丈夫です。

Q. 手元で検証すれば、本番でのトラブルは防げますか?

コードに関する問題の多くは防げます。ただし、サーバーの設定やデータベースの版、メールの認証など、本番にしか無いものは手元では分かりません。本番で切り替えた直後の確認と、戻し方の準備をあわせて考えてください。

Q. プラグインはすべて最新にしたほうがいいですか?

基本的には最新にすることをおすすめします。ただ、何年も更新していないプラグインでは、仕様が大幅に変わっている場合があります。更新の前後で、見た目と「有効なプラグインの一覧」を見比べてください。

PHPのバージョンアップが不安な方へ:影響を無料で確認します

「PHPを上げたらサイトが表示されなくなった」「更新ボタンが無くて最新にできない」「フォームのメールが届かない」とお困りの方は、当社にご相談ください。現在のPHPのバージョンと、上げた際に影響が出そうな箇所を無料で確認します。作業が必要であれば、着手前にお見積りをご提示します。

ログイン情報をお預かりする前の段階でも、URLとご利用中のサーバー会社をお知らせいただくことで、確認の進め方をご案内できます。

▶ PHPバージョンアップの無料確認を申し込む(お問い合わせ)

▶ すでに表示されない・エラーが出ている場合はトラブル対応へ

更新を担当する方が決まっていないサイトでは、当社の保守サポート(月額3,800円から)をご利用いただくと、更新前の確認や作業をお任せいただけます。

更新履歴

  • 2026年10月25日:公開(2026年10月23日夜〜25日に当社が対応した事例をもとに作成)

この記事を書いた人

矢部 敦

矢部 敦合同会社Edel Hearts 代表

WordPress専門の開発会社を経営。プラグイン開発・カスタマイズ・保守を専門とし、18時間におよぶUdemyのWordPress講座を開講。出典付きで回答するAIチャットボット「Edel AI Hybrid Chat」開発者。著書『WordPress はじめての最小プラグイン』(Kindle)。本ブログの記事は、実際の開発・運用で得た一次情報をもとに執筆しています。会社情報はこちら

この記事をシェア