ここでの難点は、構成ファイルで「ハードコーディング」されている異なる環境(データベースへのアクセス、ファイルの場所など)により、このファイルを常に編集しなければならないことです。 さらに、多くの場合、設定ファイルはリポジトリにアップロードされ、次のコード更新後にすべてが機能しなくなります。
この問題を解決するために、2つの方法を使用しました。
最初の-あまり成功していないようですが、構成ファイルまたはその一部を、プロジェクトが実行されているホスト名にバインドすることにあります。
これが私のXML設定の外観です(XMLは重要ではありません-本質はどのタイプの設定でも同じです)。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<!-- You can set just ip or host without "www." -->
<server ip="127.0.0.1" host="localhost">
<!-- Database params -->
<param name="db_host">dm9</param>
<param name="db_port">3307</param>
<param name="db_user">root</param>
<param name="db_pass">123</param>
<param name="db_name">dm9_idsrv</param>
…
</server>
<server ip="12.34.56.78" host="my-production-host.ru">
…
この方法の欠点は次のとおりです。
-異なる開発者(異なる環境パラメーター)が同じホストを持っている場合があります-たとえば、localhost;
-さらに、ホストを変更または追加する場合は、ファイルを編集する必要があります。
その後、別の方法を使用し始めました-現在作業中のホストを示す環境変数。
環境変数の設定は簡単です。 Apacheの場合、文字列「setEnv DEV_HOST DM9」をhttpd.confに追加して、値がDM9(開発者の名前またはニックネーム)であるDEV_HOST環境変数を作成します。 環境変数は、仮想ホストごとに個別に設定することもできます。 (ちなみに、ngixでこれがどのように行われるかはわかります。追加します。)
開発中のマシンにのみ環境変数を設定することを好みます。 このような変数がないことは、「戦闘」サーバー上にいることを意味します。
これで、私の構成ファイル(PHPプロジェクト用)は次のようになります。
if (isset($_SERVER["DEV_HOST"]) AND $_SERVER["DEV_HOST"] === "DVS") //
{
$config["db_host"] = "localhost";
$config["db_user"] = "root";
$config["db_pass"] = "";
$config["db_name"] = "xtr_ru";
}
elseif (isset($_SERVER["DEV_HOST"]) AND $_SERVER["DEV_HOST"] === "DM9") //
{
$config["db_host"] = "localhost";
$config["db_user"] = "root";
$config["db_pass"] = "123";
$config["db_name"] = "xtr";
}
else //
{
$config["db_host"] = "localhost";
$config["db_user"] = "xtr";
$config["db_pass"] = "some_password";
$config["db_name"] = "xtr";
}
経験豊富な読者なら、このすべてに1つの落とし穴があることに気付くでしょう。コンソールからスクリプトをどのように実行しますか? これは重要なタスクです-たとえば、スケジューラがスクリプトを実行できる必要があります。
また、2つのオプションがあります-彼らが言うように、皆のためではありません。
最初の方法は、ホスト値(上記の最初の方法の場合)または環境変数(2番目の方法の場合)に等しいパラメーターでスケジューラスクリプトを実行することです。 ホスト名にバインドすると、この方法のみが機能します。
ホスト名(Windowsでスクリプトを実行したbatファイルの内容)を受け取るスクリプトを実行する例を次に示します。
#clean_something.bat
cd "E:\myproject\utils"
php clean_something.php localhost
pause
(PHPを使用する場合、スクリプトに渡されるパラメーターは、$ _SERVER [" argc "]および$ _SERVER [" argv "]から取得できます。)
2番目のオプションは、オペレーティングシステムにグローバル環境変数を登録することです。 この場合、Webサーバーの構成ファイルに登録する必要はありません。 Windowsでは、これは「マイコンピュータ」のプロパティ(以降、[詳細設定]タブ、[環境変数]ボタン、[システム変数]セクションの[新規]ボタン)を介して行われます。 ロシア語への翻訳は不正確かもしれません-修正してください。 その後、おそらく再起動する必要があります。 NIXプラットフォームの場合、これはもう少し複雑であり、この記事の範囲外です。 ただし、Windowsで開発しており、NIXでのみリリースしている場合は必要ありません。
はい、なぜこれらの行を多くの人に明白に書いているのですか? ただ、1つの構成ファイルを使用するプロジェクトで作業しなければならないことがあまりにも多いのですが、これは環境に対してカスタマイズできません。 頻繁に編集する必要のない構成を作成します。 お願いします:)