PHP のバージョンを上げると、なぜ古いサイトが止まるのか
サーバー会社から「古い PHP のサポートが終了します」という案内が届いた。あるいは、言われるままにバージョンを上げたらサイトの一部が動かなくなった——という状況で読まれることを想定した記事です。
先に結論
- PHP は古い書き方を意図的に廃止しながら新しくなります。だから古いサイトは止まります
- 🚨 発症は切り替えた日ではなく、その機能を初めて使った日です。「上げたけど問題なかった」は安全の証明になりません
- とはいえ上げないほうが危険です。サポートが終わった PHP は、脆弱性が見つかっても修正されません
- 正しい手順は「上げるかどうか」で悩むことではなく、複製環境で先に試すことです
なぜ、上げると止まるのか
WordPress もプラグインもテーマも、PHP というプログラミング言語で書かれています。サーバーの PHP を新しくするというのは、それらを動かしている土台そのものを入れ替えるということです。
PHP は、古い書き方をいつまでも受け入れ続ける方針を取っていません。安全性や一貫性のために、かつて使えた書き方を段階的に廃止しています。廃止された書き方が残っているコードは、新しい PHP では読み込まれた瞬間に停止します。
更新されなくなって何年も経ったプラグインや、10年前に作られたテーマは、当時の書き方のまま止まっています。問題はサイトの側ではなく、放置されたコードの側にあります。
最も厄介な性質:発症が遅れる
この問題の本当の難しさは、ここにあります。
PHP のコードは、そのコードが実際に実行されたときに初めてエラーになります。ファイルが存在するだけでは何も起きません。つまり——
- トップページでしか動かないコードなら、切り替えた瞬間に分かります
- 管理画面の特定の設定画面でしか動かないコードなら、誰かがその画面を開くまで発症しません
- フォーム送信時にしか動かないコードなら、次に問い合わせが来たときに壊れます
「先月バージョンを上げたが、何も問題は起きていない」という状態は、安全であることの証明にはなりません。まだ誰もその機能を使っていないだけかもしれません。数ヶ月後、担当者が普段開かない画面を開いた日に、突然「重大なエラー」が出ます。
そして、その日に切り替え作業のことを覚えている人はいません。原因と結果が時間的に離れているため、まったく別の原因を疑って時間を溶かします。
それでも上げなければならない理由
「動いているなら、そのままにしておけばいい」と考えたくなりますが、これは通りません。
PHP には各バージョンごとにサポート期限があり、期限を過ぎると脆弱性が見つかっても修正版が出ません。攻撃する側から見れば、期限切れの PHP で動いているサイトは、鍵の壊れ方が公開されている家と同じです。
加えて、実務上の締め切りもあります。
- サーバー会社が強制的に切り替える。古い PHP の提供自体が終了すれば、選ぶ余地はありません
- 新しいプラグインが動かない。要求される PHP に達していないと、インストールも更新もできません
- WordPress 本体の更新が止まる。本体が止まれば、本体側の脆弱性も塞げなくなります
つまり「上げると壊れるかもしれない」と「上げないと守れない」の二択ではありません。上げないことは、単に問題を先送りして、より悪い条件で対応する日を作っているだけです。
安全に上げる手順
1. 複製環境を用意する
これが唯一の確実な方法です。本番と同じ中身の複製を作り、そこで PHP を上げて動作を確認します。本番でいきなり切り替えて、問題が出てから戻すというやり方は、その間サイトが止まります。
2. 「見て回る」範囲を決めておく
発症が遅れる性質があるため、トップページを開いて問題なかった、では不十分です。事前に確認する画面の一覧を作ってください。
- 表側:トップ、一覧、詳細、検索結果、問い合わせフォーム(実際に送信まで)
- 管理画面:投稿の新規作成と編集、メディアの追加、各プラグインの設定画面すべて
- 普段は使わないが、年に数回使う機能
管理画面のプラグイン設定画面は、特に見落とされます。普段開かない画面ほど、壊れていても気づかれません。
3. 事前に「予告」を拾っておく
PHP は、廃止予定の書き方に対して事前に警告を出します。エラーログに Deprecated として記録されているものが、それです。
これは「次のバージョンで止まる場所の予告」です。今は動いているので無視されがちですが、上げる前にログを見れば、どこが危ないかを事前に知ることができます。
4. 段階的に上げる
何段階も飛ばして一気に上げると、複数の原因が同時に噴き出して切り分けができません。1段階ずつ上げて、それぞれで確認するほうが結果的に早く終わります。
止まってしまった場合
すでに切り替えてしまい、サイトが動かなくなった場合は、まず PHP のバージョンを元に戻してください。多くのサーバーでは管理画面から数クリックで戻せます。原因調査はサイトを復旧させてから行います。
「重大なエラー」の画面が出ている場合は、原因のプラグインを特定する手順がそのまま使えます。エラーログには、止まったファイルの場所が記録されています。
原因のプラグインがすでに更新されなくなっているものだった場合、直す方法はありません。代替を探すか、その機能を諦めるかの判断になります。この判断を、サイトが止まっている状態で迫られるのは最悪です。だからこそ、複製環境で先に試す価値があります。
