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