WordPressのPHPバージョンアップ|止まる原因と直し方

WordPressのPHPバージョンアップ|止まる原因と直し方

「PHPのバージョンを上げたら、サイトが真っ白になった」「脆弱性のニュースで8.3以上に上げたいけれど、うちのWordPressが壊れないか不安だ」——WordPressのPHPバージョンアップは、やることは画面で1つ切り替えるだけなのに、結果が読めないのがいちばん怖いところです。

結論から言うと、PHPを上げてサイトが止まる原因の多くは、WordPress本体ではなく、古いテーマやプラグインに残った書き方です。切り替える前にテーマとプラグインのファイルをClaude Codeに読ませれば、止まる場所を事前に洗い出して直せます。私たちが架空の会社のサイトで試したところ、仕込んだ14か所の問題を約1分ですべて見つけ、直したあとはPHP 8.3で警告が1件も出なくなりました。

株式会社Fyveは、中小企業のWeb運用とAI活用を支援しています。この記事では、その検証の中身と、自分のサイトでPHPを8.3以上に上げるときの手順を、非エンジニアの方にも進められる形でまとめます。

なぜ今、WordPressのPHPを上げるのか

2026年10月21日、PHPに重大な脆弱性(通称php2shell)が2つ見つかり、修正版が公開されました。修正版が出たのは8.5・8.4・8.3・8.2の4つの系列だけで、8.1以前には公式の修正版が出ていません。8.1以前のサイトは、サーバー会社が独自に修正を入れるのを待つか、修正版が出ている8.3以上に移るかのどちらかです。

8.2も安心はできません。PHPの開発チームの予定では、各系列のセキュリティ修正が出る期間は次のとおりです。

PHPのバージョン

セキュリティ修正が出る期限

8.2

2026年12月31日

8.3

2027年12月31日

8.4

2028年12月31日

8.5

2029年12月31日

WordPress自身も、古いPHPで動いているとダッシュボードに警告を出します。私たちの検証用サイト(PHP 7.4)では、次のように表示されました。「PHP の推奨バージョンは 8.3 以上です」と書かれています。

PHP 7.4で動く検証用のWordPressのダッシュボードに出た「PHP の更新を推奨」。PHP の推奨バージョンは 8.3 以上と書かれている

脆弱性そのものの中身と、サイト運営者が今やることは、別の記事にまとめています。

php2shellとは|PHPの脆弱性でサイト運営者が今やること

PHPを上げるとWordPressが止まる理由

PHPは、バージョンが上がるたびに古い書き方を少しずつ廃止しています。とくにPHP 8.0で、長く使われてきた書き方がまとめて使えなくなりました。7.4から8.0以上に上げるときに止まるサイトが多いのはこのためです。

WordPress本体は新しいPHPに合わせて更新されています。止まるのは、多くの場合、次のような部分です。

  • 制作会社や社内の担当者が昔作った、自作のテーマ
  • 問い合わせフォームなど、自作の小さなプラグイン
  • 作者の更新が何年も止まっている、配布や販売のテーマ・プラグイン

古い書き方には、2つの段階があります。

段階

例

新しいPHPでどうなるか

PHP 8.0で消えた書き方

create_function()、each()、money_format()、get_magic_quotes_gpc()、文字列の1文字目を $s{0} と書く、implode() の引数を逆の順で書く、文字列に count() を使う

ページが止まる

PHP 8.1・8.2で非推奨になった書き方

宣言していないプロパティに値を入れる、strlen() や trim() に null を渡す、utf8_encode()、文字列の中に "${変数}" と書く

サイトは動くが、ログに警告が出る。将来のPHPで止まるおそれがある

PHPを上げるとサイトが止まる仕組み。WordPress本体は新しいPHPに対応していることが多いが、テーマやプラグインに古い書き方が残っていると、PHP 8.0で消えた書き方ではページが止まり、8.1・8.2で非推奨の書き方ではログに警告が出る

英字の名前は覚えなくて大丈夫です。大事なのは、この種類の問題は、ファイルを読めば事前に見つけられるということです。そこをAIに任せます。

架空の会社のサイトで試したこと

検証の条件

実際のお客様のサイトは使えないので、架空の会社「株式会社サンプル木工」(家具の製作・販売)のWordPressを手元に作りました。トップ・会社概要・製品・お問い合わせの4ページと、問い合わせフォームのプラグインがあるサイトです。

  • WordPress 6.8.3(PHP 7.4と8.3の両方に対応している版)
  • 同じサイトを、PHP 7.4.33と、修正版のPHP 8.3.36の2つで動かす
  • テーマとプラグインには、2016〜2019年ごろによくあった書き方で、問題を14か所仕込んだ(ページが止まるもの7か所、警告だけのもの7か所)
  • Claude Code(2.1.306、モデルはSonnet 5.5)には、FTPで落としてきた想定で、テーマとプラグインのフォルダだけを渡した。仕込んだ場所の一覧は見せていない

PHP 7.4では普通に表示される

PHP 7.4では、4ページとも問題なく表示され、問い合わせフォームの送信もできました。見た目からは、古い書き方が残っていることは分かりません。

PHP 7.4で表示した架空の家具会社「株式会社サンプル木工」のトップページ

PHP 8.3に切り替えると、トップは「重大なエラー」になる

同じサイトをPHP 8.3で開くと、トップページはWordPressの「このサイトで重大なエラーが発生しました。」という画面になりました。

PHP 8.3に切り替えたあとのトップページ。「このサイトで重大なエラーが発生しました。」と表示されている

注意したいのは、ほかのページはエラーの画面すら出なかったことです。会社概要・製品・お問い合わせは、ヘッダーと見出しまで表示されたあと、本文が途中から消えました。お問い合わせのページでは、フォームそのものが表示されません。トップページだけを見て「動いている」と判断すると、ここを見落とします。

PHP 8.3でのお問い合わせページ。見出しの下が空白で、フォームが表示されていない

Claude Codeに「まだ直さないで」と点検だけ頼む

テーマとプラグインのフォルダを置いた場所でClaude Codeを開き、次のように頼みました。

このフォルダには、私の会社のホームページ(WordPress)のテーマとプラグインが入っています。サーバーのPHPを7.4から8.3に上げたいです。PHP 8.3にしたときに、サイトが止まる場所と、警告が出る場所をすべて探して、一覧にしてください。止まるものと警告だけのものは分けて、ファイル名と行番号、何が起きるか、直し方を書いてください。一覧は 点検結果.md に保存してください。ファイルはまだ直さないでください。

Claude Codeは12個のPHPファイルを全部読み、約55秒で、仕込んだ14か所をすべて一覧にしました。費用はClaude Codeが記録する従量課金換算の目安で約0.19ドルです。保存された一覧の冒頭は次のとおりです。

Claude Codeが保存した点検結果の冒頭。止まるもの7件・警告のみ6件の表と、ページごとの影響の一覧

仕込んだ問題

見つけた数

ページが止まるもの(PHP 8.0で消えた書き方)

7か所中7か所

警告だけのもの(PHP 8.1・8.2で非推奨)

7か所中7か所

数だけでなく、中身にも感心したところが2つありました。

1つ目は、見落としやすい問題を、見落としやすいと書いてくれたことです。問い合わせフォームのプラグインには、フォームを表示するときに止まる問題と、「送信する」を押したときにだけ止まる問題を仕込んでいました。後者は、前者を直したあとで初めて表に出ます。Claude Codeはこれを、次のように説明していました。

点検結果のA-7。get_magic_quotes_gpc() はフォーム送信時にだけ止まり、A-6を直したあとに初めて表面化するので見落としやすいと書かれている

ページを開いて確かめるだけのやり方では、送信まで試さない限り、この問題には気づけません。

2つ目は、何をしていないかを最初に書いたことです。この環境にはPHPが入っていないため、コードを読んで判断する点検であり、実際に8.3で動かして確かめてはいない、と一覧の冒頭に明記していました。AIの点検結果をそのまま信じず、実際に動かして確かめる工程が別に要る、ということです。

気になった点も1つあります。一覧の表では「警告のみ 6件」と数えていましたが、本文では5つの見出しにまとめていて、数え方がそろっていませんでした。中身は仕込んだ7か所をすべて含んでいたので実害はありませんが、件数をそのまま報告に使う前に、自分で数え直したほうが安全です。

直してもらう

続けて、次のように頼みました。

点検結果.md にある問題を、止まるものも警告だけのものも、すべて直してください。サイトの見た目と動きは変えず、PHP 7.4 でも PHP 8.3 でも動くようにしてください。直し終わったら、何を直したかを 点検結果.md の最後に追記してください。

修正は約31秒、約0.14ドルで終わりました。代表的な直し方は次のとおりです。

元の書き方

直した書き方

create_function() で並べ替えの関数を作る

今の書き方(無名関数)に置き換え

each() で1つずつ取り出す

foreach に置き換え

money_format() で金額を整える

number_format() に置き換え

get_magic_quotes_gpc() の分岐

今は常に無効な機能なので、分岐ごと削除

宣言していない値をクラスに入れる

クラスの先頭で宣言を足す

ここでも、指示した「見た目と動きは変えず」を守るための判断が見られました。金額の直し方は、最初の一覧では桁区切りの付く書き方を提案していましたが、それだとページに埋め込まれた値が「38000」から「38,000」に変わってしまいます。そこで修正のときには、元と同じ値になる書き方に変えていました。

また、見出しの頭文字を取る処理については、正しく取る書き方にすると表示が変わるため、あえて元の動きのまま直し、「変えたい場合はこう書く」と別に書き添えていました。

直したあと、実際に動かして確かめる

直したファイルを検証用のサイトに戻し、PHP 7.4と8.3の両方で確かめました。

  • 4ページとも、PHP 7.4でも8.3でも最後まで表示された
  • 問い合わせフォームは、どちらのPHPでも送信が受け付けられ、入力が欠けたときはエラーの案内が出た
  • 警告をすべて記録する設定にして全ページとフォームを試したところ、警告は0件だった
Claude Codeが直したあと、PHP 8.3で最後まで表示された製品ページ

直したコードがPHP 7.4でも動くのは、実際の作業ではとても大事です。直したファイルを、PHPを切り替える前に先にアップロードできるからです。今の7.4のままで直したファイルを入れ、表示が変わらないことを確かめてから、PHPを切り替えられます。

架空の会社のサイトで試した結果。仕込んだ14か所をClaude Codeが約55秒・約0.19ドルの点検ですべて一覧にし、約31秒・約0.14ドルで直した。PHP 8.3で4ページとも表示され、フォーム送信も成功、警告0件

自分のサイトでPHPを8.3以上に上げる手順

ここからは、検証で分かったことを、実際のサイトでの手順に置き換えます。

自分のサイトでやる7つの手順。バックアップ、更新、手元にコピー、点検だけ頼む、直して確かめる、直したファイルを先にアップロード、PHPを切り替えて確かめる

1. バックアップを取る

サイトのファイルとデータベースの両方を、手元に残せる形で取ります。WordPressのバックアップ用のプラグインを使うか、サーバー会社のバックアップの機能を使います。

2. テーマとプラグインを更新する

配布や販売のテーマ・プラグインは、作者が新しいPHPに対応させた版を出していることが多く、更新するだけで直ることがあります。WordPressの管理画面の「更新」から行います。

3. テーマとプラグインのフォルダを手元にコピーする

FTPソフトや、サーバー会社のファイルを管理する画面から、wp-contentの中にあるthemesとpluginsのフォルダを手元のパソコンにダウンロードします。全部でなくても、自作のテーマと、更新が止まっているプラグインがあれば十分です。

4. Claude Codeに点検だけを頼む

ダウンロードしたフォルダでClaude Codeを開き、検証と同じように頼みます。今のPHPのバージョンと、上げたいバージョンを書き換えて使ってください。

このフォルダには、私の会社のホームページ(WordPress)のテーマとプラグインが入っています。サーバーのPHPを(今のバージョン)から8.3に上げたいです。PHP 8.3にしたときに、サイトが止まる場所と、警告が出る場所をすべて探して、一覧にしてください。止まるものと警告だけのものは分けて、ファイル名と行番号、何が起きるか、直し方を書いてください。一覧は 点検結果.md に保存してください。ファイルはまだ直さないでください。

5. 直してもらい、変えた所の一覧を確かめる

一覧を読んで納得できたら、直してもらいます。「見た目と動きは変えず、今のPHPでも8.3でも動くように」「何を直したかを一覧に追記して」の2つを必ず添えます。直したあとは、一覧と、ファイルのどこが変わったかを確かめます。分からない変更があれば、そのままClaude Codeに「この変更で何が変わるのか」と聞けば説明してくれます。

6. 直したファイルを、切り替える前にアップロードする

直したファイルをサーバーに戻し、今のPHPのまま、表示とフォームの送信が変わっていないことを確かめます。

7. PHPを切り替えて、すべてのページを確かめる

サーバー会社の管理画面でPHPを8.3以上に切り替え、次を確かめます。

  • トップページと、すべての種類の下層ページ(会社概要、製品、ブログの記事など)が最後まで表示されるか
  • 問い合わせフォームを実際に送信できるか(表示されるだけでは不十分)
  • WordPressの管理画面にログインできるか
  • サイトヘルス(「ツール」→「サイトヘルス」→「情報」→「サーバー」)のPHPのバージョンが変わったか
WordPressのサイトヘルスの「サーバー」。PHP バージョンに8.3.36と表示されている(架空の検証用サイト)

問題が出たら、いったん元のバージョンに戻し、出たページとエラーの内容をClaude Codeに伝えて直してもらいます。戻した状態は古いPHPのままなので、長く置かないようにします。

エックスサーバーを使っている場合の切り替えの画面や、今の脆弱性への対応状況は、次の記事にまとめています。

エックスサーバーのPHP脆弱性対応|修正完了と利用者が今やること

Claude Codeに頼むときの注意

  • 本番のサーバーに直接触らせない。手元にコピーしたフォルダで作業させます。FTPやサーバーのログイン情報をAIに渡す必要はありません
  • 最初は「まだ直さないで」と点検だけを頼む。一覧を読んでから直させると、何が変わるのかを把握したまま進められます
  • コードを読むだけの点検だと知っておく。今回もClaude Codeは、実際に動かしては確かめていないと自分で書いていました。最後は必ず、実際の画面とフォームの送信で確かめます
  • 販売や配布のテーマ・プラグインを自分で書き換えると、次の更新で元に戻る。作者の対応版を待つか、別のテーマ・プラグインへの乗り換えを考えます。自分で直すのは、自作のものや、更新が止まっていて乗り換えが決まるまでのつなぎにとどめます
  • 件数や要約は自分でも確かめる。今回も、表の件数と本文のまとめ方がそろっていない箇所がありました

Claude Codeを使わない場合

AIを使わずに進めるなら、次のどちらかです。

  • サイトを作った制作会社や保守の担当者に頼む。PHPのバージョンを上げる作業と確認は、保守の範囲に入っていることも多いので、まず聞いてみます
  • 本番とは別の場所でPHPを上げ、エラーの記録を見る。WordPressには、エラーや警告をファイルに記録する設定(WP_DEBUG_LOG)があります。本番とは別の場所でPHPを上げ、全ページとフォームを試して、記録に出たものを1つずつ直します。今回の検証でも、この記録を使って、直したあとに警告が0件であることを確かめました

どちらの方法でも、「止まる場所を事前に洗い出し、切り替える前に直しておく」という順番は同じです。

よくある質問

8.3と8.4、どちらに上げればいいですか?

どちらも今回の脆弱性の修正版が出ていて、WordPressも8.3以上を推奨しています。8.4のほうがセキュリティ修正の出る期間が1年長い(2028年12月31日まで)ので、使っているテーマとプラグインが8.4に対応していれば8.4、迷うなら8.3を選び、余裕ができてから上げる、で十分です。

WordPress本体は古いままでも大丈夫ですか?

WordPress本体も、新しいPHPに対応した版に更新しておきます。今回の検証では、PHP 7.4と8.3の両方に対応している6.8.3を使いました。WordPress本体の更新と、PHPの切り替えは、別々の日に分けると、問題が出たときに原因を切り分けやすくなります。

Claude Codeを使うのにお金はかかりますか?

Claude Codeを使うには、Claudeの有料プランか、APIの契約が必要です。今回の点検と修正にかかった費用は、Claude Codeが記録する従量課金換算の目安で、点検が約0.19ドル、修正が約0.14ドルでした。サイトの規模やファイルの数で変わります。

エンジニアでなくてもできますか?

Claude Codeに頼む部分は、この記事の文面をそのまま使えます。難しいのは、ファイルのダウンロードとアップロード、PHPの切り替えといった、サーバーを触る部分です。不安なら、そこだけ制作会社に頼み、点検の一覧を渡して直してもらう分担もできます。

テーマやプラグインの数が多いときは?

まず、更新できるものを更新し、残った自作のものと更新が止まっているものだけを点検します。全部を一度に渡すより、テーマ1つ・プラグイン数個ずつに分けたほうが、一覧も読みやすくなります。

まとめ

  • PHPを上げてWordPressが止まる原因の多くは、古いテーマ・プラグインに残った、PHP 8.0で消えた書き方
  • 止まり方は「重大なエラー」の画面だけではない。ページの途中から白くなる、フォームだけ消える、送信したときだけ止まる、もある
  • 架空の会社のサイトでは、Claude Codeが約55秒・約0.19ドルで、仕込んだ14か所をすべて一覧にし、約31秒・約0.14ドルで直した。直したあとはPHP 8.3で警告0件
  • 手順は、バックアップ → 更新 → 手元にコピー → 点検だけ頼む → 直して確かめる → 直したファイルを先にアップロード → PHPを切り替えて全ページとフォームを確かめる
  • AIの点検はコードを読むだけ。最後は必ず、実際の画面とフォームの送信で確かめる
成果から逆算するHP制作
← Back to Blog