あなたが言ったように、最も簡単な方法は構成ファイルを使用することです。
多くのフレームワークがこれを使用しています( Zend
、 CakePHP
、コハナ
など)、これが最も一般的な方法です(web.config
を使用するASP.NETなどの非PHP環境でも ファイル)。これにより、サイトのファイルをコピーするだけで、構成値を環境から環境にコピーすることもできます。これは、サーバーセットアップ環境変数(すぐに失われたり忘れたりする可能性があります)に依存するよりもメリットがあります。
パスワードは誰でもアクセスできるファイルではないため、パスワードの難読化について心配する必要はありません。確かに、Webアクセス可能であってはなりません。これが意味するのは、次のいずれかを行うことです。a)構成ファイルを提供しないようにWebサーバーに指示します( IIS
すでにweb.config
でこれを行っています ファイルを作成し、コンテンツの代わりにHTTP 404.8ステータスを提供します)またはb)Web提供ディレクトリの外に移動します。誰かがあなたの設定ファイルを見ることができるなら、それはあなたのソースコードにそれを持っているより悪いです。
また、構成ファイルのベース(空/デフォルト)バージョンを用意し、環境ごとに分離して、本番、開発、およびテストプラットフォーム用に異なる構成ファイルを作成できるようにすることもお勧めします。
環境変数は、これらの環境を区別するための最も一般的な方法であり、次のコードのようになります。
// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
// Copy from web server to PHP constant
define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}
if (!defined('ENVIRONMENT')) {
// Default to development
define('ENVIRONMENT', 'development');
}
// Load in default configuration values
require_once 'config.default.php';
// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';
かなり一般的なもう1つの方法は、XML構成ファイルを使用し、必要に応じて必要な値のみを読み取ることです(構成ファイルのキャッシュされたコピーをメモリに保存します)。これは、PHPファイルを任意に含めるのではなく、特定の値でのみロードするように非常に簡単に制限でき、私の意見では全体的に優れたソリューションですが、上記の方法で正しい方向に進むことができます。
おそらく、VCS が必要になるでしょう。 ファイルを無視します。一方、ファイルのスケルトン、または適切なデフォルトのスケルトン(もちろん、後者はログインデータには適用されません)をバージョン管理する必要がある場合があります。これに対処する一般的な方法は、チェックインされたテンプレート構成ファイルを用意することです。インストール手順では、そのファイルを実際の構成ファイルの場所にコピーし、そこでカスタマイズします。これは、手動または自動のプロセスにすることができます。
(メインの質問とは多少関係ありませんが、環境に定数を導入すると、ライブの SMTP 1つですが、もちろんこれは構成ファイルを使用して行うこともできます)