PHPでドメインごとに定数を自動設定する方法 ~match(true)のスマートな使い方~

複数のWebサイトを運用していて、それぞれ異なる設定を持たせたい場合、ドメインに応じて定数を自動的に設定する方法が役立ちます。
ここでは、PHP 8以降の構文を使って、ホスト名に応じた定数を動的に定義する例を紹介します。


実装コード

以下は、現在のドメイン名(ホスト名)に含まれる文字列をチェックし、それに応じて定数 SITE_TYPE を定義する例です。

// ================================
// サイト種別自動設定(ドメインによる)
// ================================
define('SITE_TYPE', match (true) {
    str_contains($_SERVER['HTTP_HOST'], 'alpha-site')  => 0,
    str_contains($_SERVER['HTTP_HOST'], 'beta-site')   => 1,
    str_contains($_SERVER['HTTP_HOST'], 'gamma-site')  => 2,
    str_contains($_SERVER['HTTP_HOST'], 'delta-site')  => 3,
    default                                             => 0, // 不明な場合は0
});

ポイント解説

✔ match(true) の仕組み

match(true)if-elseif を簡潔に書ける構文です。
各行で「この条件がtrueだったら → この値を返す」という形式で記述します。

例:

match (true) {
    条件A => 値A,
    条件B => 値B,
    ...
}

✔ str_contains() を使ったホスト名判定

str_contains($haystack, $needle) は、文字列 $haystack$needle が含まれるかをチェックします。
この場合は $_SERVER['HTTP_HOST'] に特定のキーワードが含まれているかを判定しています。

✔ default によるフォールバック

すべての条件に一致しない場合でも、default => 0 によって安全な初期値を保証します。


実用例

設定された定数 SITE_TYPE を用いて、環境に応じた表示や動作を分岐できます。

$siteName = match(SITE_TYPE) {
    0 => 'Alpha Site',
    1 => 'Beta Site',
    2 => 'Gamma Site',
    3 => 'Delta Site',
    default => 'Unknown Site',
};
if (SITE_TYPE === 1) {
    include 'config-beta.php';
}

この仕組みのメリット

  • 環境設定の自動化:サーバー設定に依存せずに切り替え可能
  • 管理しやすい:ドメイン名さえ分かれば、他の設定ファイルを変更する必要がない
  • 保守性が高い:定数なのでグローバルに一貫性を持って扱える

注意点

  • PHP 8.0以上が必要です(match および str_contains を使用)
  • ホスト名の取得には $_SERVER['HTTP_HOST'] を使用しており、CLI実行などでは値が得られない場合があります

まとめ

PHPの match(true)str_contains() を組み合わせることで、ドメイン名に応じた環境定数の自動設定をスマートに実現できます。
複数サイトを管理するプロジェクトで、環境分岐の管理をシンプルにしたい方には特におすすめです。

コメント

タイトルとURLをコピーしました