東京都中央区のシステム開発会社【株式会社ゼルダ】

  • ホーム
  • サービス内容
  • PHP対応
  • セキュリティ
  • エンジニア登録
  • 会社概要
  • パートナー募集
  • お見積り・ご相談

PHPバージョンアップ・脆弱性対応 > 対応事例

自社サイトを PHP 7.4 から PHP 8.5 へ移行しました

2026年11月

この事例のポイント
  • PHP 7.4.33 で動いていた自社サイトを、PHP 8.5 へ移行
  • 表示上のエラーは出ないのに、お問い合わせフォームだけが空白になる問題が見つかった
  • 原因は PHP 8.0 で廃止された「古い形式のコンストラクタ」。検証環境でフォームを最後まで動かして発見

背景

弊社のコーポレートサイトと製品サイトは、長年運用してきたPHPで動いています。中には十数年前に書かれたプログラムや、文字コードが Shift-JIS のものも含まれており、PHP 7.4 のまま運用していました。

PHP 7.4 は2022年11月にサポートが終了しています。お客様にPHPのバージョンアップをご提案している立場として、まず自社サイトを最新の PHP 8.5 へ移行することにしました。

進め方

  1. 検証環境を用意する:Docker で PHP 8.5 の環境を作り、本番と同じ設定(短縮タグの有効化など)を再現しました。警告・非推奨の通知もすべて表示する設定にしています。
  2. 削除された関数を機械的に探す:PHP 7.0〜8.5 で削除・変更された関数や書き方を、ソース全体から検索しました。
  3. 全ページを表示して確認する:PHPを含むすべてのページを開き、警告・非推奨の通知が出ないことを確認しました。
  4. フォームを最後まで動かす:入力 → 確認 → 送信 → メール到着まで、実際に操作しました。メールは検証環境では送らず、送信内容をファイルに書き出して確認しています。

見つかった問題と対処

1. お問い合わせフォームが空白になる(古い形式のコンストラクタ)

製品サイトのお問い合わせフォームを開くと、本来の入力欄が表示されず、ほぼ空白のページになりました。PHPのエラーは一切出ていません。

原因は、フォームの画面を組み立てるクラスの「コンストラクタ」の書き方でした。PHP 4 の時代は、クラスと同じ名前のメソッドを書くと、それがコンストラクタ(生成時に自動で呼ばれる初期化処理)になりました。

class Simpty {
    function Simpty() {   // PHP 4 形式のコンストラクタ
        // テンプレートの読み込みなどの初期化
    }
}

この書き方は PHP 7 では非推奨の通知が出るだけで動いていましたが、PHP 8.0 からは単なる普通のメソッドとして扱われ、自動では呼ばれなくなりました。初期化が行われないため、テンプレートが読み込まれず、画面が空になっていたのです。

class Simpty {
    function __construct() {   // 現在の書き方
        // テンプレートの読み込みなどの初期化
    }
}

エラーが出ないため、ページを開いて表示を確認するだけでは見落としやすい問題です。「フォームを実際に動かす」確認が欠かせない理由がここにあります。

2. 削除された split() 関数

同じクラスの中で、文字列を区切る split() 関数が使われていました。この関数は PHP 7.0 で削除されています。区切り文字が正規表現である必要がない箇所だったため、explode() に置き換えました。

3. 未定義の変数への警告

共通ヘッダーのテンプレートで、ページによっては定義されない変数を参照していました。PHP 8.0 からは、未定義の変数を読むと「注意(Notice)」ではなく「警告(Warning)」が出ます。変数が無い場合の初期値を設定して解消しました。

あわせて、本番環境でエラー内容が画面に表示される設定になっていた箇所を見直し、エラーは画面に出さずログに記録する設定に変更しました。エラー表示はサーバの構成を外部に知らせる手がかりになるため、本番では表示しないのが原則です。

4. Shift-JIS のソースを壊さない

製品サイトのソースは Shift-JIS で書かれています。一般的なエディタで開いて保存すると UTF-8 に変換され、日本語が文字化けすることがあります。修正は変更箇所のバイト列だけを置き換える方法で行い、文字コードを変えずに済ませました。

結果

修正は3ファイル・数行で済みました。PHP 8.5 の検証環境で、すべてのページで警告・非推奨の通知が出ないこと、お問い合わせフォームのメール送信まで正常に動くことを確認したうえで、本番に反映しています。

修正量は少なくても、どこが壊れるかを見つけるまでが本番です。古いサイトほど、エラーを出さずに壊れる箇所が潜んでいます。

古いPHPで動いているサイトのバージョンアップをご検討中の方へ

ヒアリング・お見積りは無料です。他社が制作したサイトもご相談ください。

無料で見積もりを依頼する
PHPバージョンアップ・脆弱性対応のご案内
システム開発・PHPバージョンアップ・セキュリティ対策のご相談はお気軽に
お見積りは無料です。「何から相談すればいいか分からない」という段階でも構いません。
お見積り・ご相談はこちら
ホーム | サービス内容 | PHPバージョンアップ・脆弱性対応 | セキュリティ対策 | エンジニア登録 | 会社概要 | 製品情報 | 事業パートナー募集 | 採用情報 | お問い合わせ | プライバシーポリシー
© 株式会社ゼルダ