PHP用のdotenvを使用して環境設定を管理しています(lavarelではありませんが、lavarelもdotenvを使用しているためタグを付けました)
コードベースから .env を除外し、他のすべての協力者のために .env.example を追加しました
dotenv の github ページ:
phpdotenv は開発環境用に作成されており、通常は本番環境では使用しないでください。本番環境では、要求ごとに .env ファイルをロードするオーバーヘッドがないように、実際の環境変数を設定する必要があります。これは、Vagrant、chef、Puppet などのツールを使用した自動デプロイ プロセスによって実現できます。また、Pagodabox や Heroku などのクラウド ホストを使用して手動で設定することもできます。
私が理解していないのは、次の例外が発生することです。
PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.
これは、「リクエストごとに .env ファイルをロードするオーバーヘッドがないように、実際の環境変数を設定する必要がある」というドキュメントと矛盾しています。
したがって、問題は、dotenv がその例外をスローする理由があるかどうか、および/または何かが足りないかどうかです。まず他のdotenvライブラリ(ruby)と比べて挙動が違う
私はこれを簡単に回避できますが、あまり良い解決策ではありません:
if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
}
私の意見では最も良い解決策ですが、 dotenv がこれを処理する必要があると思います。
$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__);
//This method is protected so extract code from method (see below)
$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
//both calls are cached so (almost) no performance loss
if(is_file($filePath) && is_readable($filePath)) {
$dotenv->load();
}