ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:正規表現を少しだけ学びました

スポンサーリンク

2年以上前に作成したシステムをベースに、一部修正して再利用することになりました。
ソースコードを確認すると、テストサイトで利用する場合は、テスト用のデータベースへの接続文字列を手作業で有効にしていました。
本番サイトで利用する場合は、本番用のデータベースへの接続文字列を有効にしていました。

具体的には、テストサイトの場合は、以下のようにしていました。

    define("DATABASE_NAME", "testdb");   
//  define("DATABASE_NAME", "productiondb");

本番サイトの場合は、以下のようにコメントアウトが異なるだけにしていました。

//  define("DATABASE_NAME", "testdb");   
    define("DATABASE_NAME", "productiondb");

自動で切り替える方法を考える

当初は、以前と同じようにコメントアウトを修正していましたが、いちいち直すのが面倒に感じました。
テストサイトと本番サイトでは、URLに「test」の文字列が含まれているかどうかの違いがあります。
この違いで接続先を切り替えればいいということに気がつきました。

URLは$_SERVER["REQUEST_URI"]で取得できるので、正規表現を用いて「test」の文字列が含まれているか判定することにしました。
正規表現の書き方が苦手なのと、PHPではどの正規表現用の関数を使えばいいのかわからず悩んだため、少し時間がかかりました。
結果は以下の内容で実現できました。

//  URLに[test]が含まれていたら、テストデータベースに接続する
if (preg_match("/test/", $_SERVER["REQUEST_URI"]) === 1) {
    define("DATABASE_NAME", "testdb");   
} else {
    define("DATABASE_NAME", "productiondb");
}

正規表現関係で学んだこと

どの正規表現用の関数を使えばいいのかは、こちらのページを参考にしました。
php - ereg_matchとpreg_matchの違いについて教えて下さい。 - スタック・オーバーフロー

わかりやすく説明がされています。
基本は「preg_match()」を使えばいいというのだけでも覚えておくようにしたいです。

「preg_match()」の使い方については、PHPサイトのマニュアルを読みました。
PHP: preg_match - Manual

今回必要な情報は十分得られました。