質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

9090閲覧

PHP 本番環境とテスト環境で設定を自動で切り替えたい

c137621

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2014/11/27 04:29

PHPでウェブサイトを作っています。

本番環境とテスト環境に同じファイルを置いて、
データベースやメールの送信先が環境に応じて自動で切り替わるようにしたいと思っています。

現在は一番最初に以下のコードを設置して定数の値を変更しています。

lang

1switch (true) { 2 3 case ($_SERVER["HTTP_HOST"] === 'unko.love.com'): 4 // ローカル開発環境の設定 5 break; 6 7 case ($_SERVER["HTTP_HOST"] === 'hoge.love.com'): 8 // サーバーテスト環境の設定 9 break; 10 11 default: 12 // 本番環境の設定 13 break; 14}

これの欠点やもっといい管理方法などがあれば教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

HTTP_HOST はクライアントから送信される値です。ネームベースバーチャルホストであれば問題ないですが、そうではないなら信頼出来ない値です。

私は HTTP_HOST ではなく uname("n") をよく使っていました。
例えば aaa.example.com なら com.example.aaa.php や com.example.php というファイルを読み込む、などとです。

この方法の欠点は、

  • 1つのホストで1つしか動かせられない
    • ホストに1つしか無い情報を使っているので
    • ユニットテストなどは開発環境とテスト環境が共存するのが普通なのでかなり困ります
    • そのため TaMaMhyu さんが述べられているような環境変数での切り替えと併用しています
  • 実行環境をカジュアルに大量生産できない
    • サーバのホスト名を設定する必要があるので
    • なのでデフォルト設定を開発環境向けにしています
    • 本番環境やステージング環境をボコボコふやすことはあまりないので
  • PaaS だと使えない
    • ホスト名が固定できないので

メリットは、

  • 環境変数だと発生しうる設定漏れが発生しえない
    • Apache にバッチにデーモンもあったりすると環境変数だと個別に設定する必要があります
    • ホスト名ならホストで固定されているので設定漏れが起こりません

あと、例であげられているドメイン名は品位を疑うのでそのドメインをあなたが所有しているのでないなら修正した方がいいと個人的には思います。

投稿2014/11/27 13:06

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

開発されているPHPでは何かフレームワークを使われているでしょうか?
フレームワークによっては環境別の切り替えが出来る機能を持って言います。

サーバ側で環境変数を設定する場合ですが、http.confや.htaccessに記載してやるというやり方があります。

httpd.confのvirtualhost例
<VirtualHost *:80>
DocumentRoot /home/fuel/public
ServerName example.com
SetEnv FUEL_ENV production
</VirtualHost>

投稿2014/12/02 06:00

mryo0826

総合スコア77

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Webサーバ側から環境を示す環境変数を設定するのが一般的だと思います。
~_ENVのような環境変数がよく使われます。値はproduction、development、stagingなどが使われています。
Webアプリケーションフレームワークではだいたいそうなっています。
デプロイ時に設定を差し替えたりするのではないかと思います。
コンソールアプリケーションを併用する場合でもシェルに環境変数を設定すれば切り替えられるので、この方が都合がいいと思います。
とは言うものの、Webとコンソールでは$_SERVERと$_ENVという違いはありますが…

投稿2014/11/27 05:11

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngyuki

2014/11/27 13:08

Web でもコンソールでも `$_SERVER` でとれませんでしたっけ?(`variables_order` の設定によるのかな??)
TaMaMhyu

2014/11/28 00:22

実は何かの時にそうなっていたのでうろ覚えだったのですが、$_SERVERで取れそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問