あなたが言ったように、最も簡単な方法は、構成ファイルを使用することです。
多くのフレームワーク ( Zend、CakePHP、Kohanaweb.config
など) がこれを使用しており、最も一般的な方法です (ファイルを含むASP.NET などの非 PHP 環境でも)。これにより、サイトのファイルをコピーするだけで、環境から環境へと構成値をコピーすることもできます。これは、サーバー設定の環境変数 (非常にすぐに失われて忘れられる可能性がある) に依存するよりも利点があります。
パスワードは誰でもアクセスできるファイルではないため、パスワードの難読化について心配する必要はありません。これが意味することは、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の代わりに偽のメールの実装を延期するなど、他のクールなことを行うことができますが、もちろんこれは構成ファイルでも実行できます)