Loads environment variables from .env
to getenv()
, $_ENV
and $_SERVER
automagically.
Why .env?
Creditable credentials in your code should not save selected by my own. 環境に設定を保存することは、12 要素のアプリケーションの信条の 1 つです。 基本的に、.env
ファイルは、.htaccess ファイルや Apache/nginx バーチャルホストを変更することなく、アプリケーションが必要とするカスタム構成変数をロードする簡単な方法である。 つまり、プロジェクトの外部でファイルを編集する必要がなく、 Apache や Nginx、CLI、そして PHP の組み込みウェブサーバーなど、どのようにプロジェクトを実行しても 環境変数が常に設定されているということです。 これは、環境変数を設定する他のすべての方法よりも非常に簡単で、きっと気に入ることでしょう!
- NO Apache または Nginx でバーチャルホストを編集しない
- NO .NET Framework に
php_value
フラグを追加しない - NO .NET Framework にフラグを追加しない。
- EASY portability and sharing of required ENV values
- COMPATIBLE with PHP’s built-in web server and CLI runner
PHP dotenv is a PHP version of the original Rubydotenv.All Rights Reserved.
インストール
インストールは Composer で簡単にできます。
$ composer require vlucas/phpdotenv
あるいは composer.json
ファイルに手動で追加します。 V2 から V3、V3 から V4、V4 から V5 へのアップグレードガイドはこちらで入手できます。
Usage
.env
ファイルには機密の API キーとパスワードが含まれることがあるので、通常バージョン管理から外されています。 別の .env.example
ファイルが作成され、機密性の高い変数以外の必要な環境変数が定義されます。 プロジェクトの共同作業者は、.env.example
ファイルをローカルの.env
にコピーし、すべての設定がローカル環境で正しいことを確認し、必要に応じて秘密鍵を入力するか、独自の値を提供します。 この使い方では、.env
ファイルをプロジェクトの.gitignore
ファイルに追加して、共同作業者がコミットすることがないようにする必要があります。 この使用法では、機密性の高いパスワードや API キーがバージョン管理履歴に残らないため、セキュリティ侵害のリスクが低く、また、プロダクションの値をすべてのプロジェクトの共同作業者と共有する必要がなくなります。 .env
ファイルが .gitignore
に追加されていることを確認し、コード内でチェックされていないことを確認します
S3_BUCKET="dotenv"SECRET_KEY="souper_seekret_key"
次に、.env.example
というファイルを作成し、これをプロジェクトにチェックします。 このファイルには、必要なENV変数が設定されているはずですが、値は空白かダミーデータで満たされているはずです。 このアイデアは、どの変数が必要かを知らせることであり、繊細なプロダクションの値を与えることではありません。
S3_BUCKET="devbucket"SECRET_KEY="abc123"
次に、アプリケーションで .env
をロードするには、次のようにします:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);$dotenv->load();
.env
ファイルがないときに投げられる例外を抑制するには、次のようにします。
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);$dotenv->safeLoad();
オプションとして、.env
以外のものを使用したい場合、2 番目のパラメーターとしてファイル名を渡すことができます:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'myconfig');$dotenv->load();
定義されたすべての変数が $_ENV
と $_SERVER
スーパーグローバルで利用可能になりました。
$s3_bucket = $_ENV;$s3_bucket = $_SERVER;
Putenv と Getenv
getenv()
と putenv()
を使用することは、これらの関数がスレッドセーフではないという事実から強く推奨されていませんが、PHP dotenv がこれらの関数を使用するように指示することはまだ可能です。 Dotenv::createImmutable
を呼び出す代わりに Dotenv::createUnsafeImmutable
を呼び出すと、 PutenvAdapter
が裏で追加されます。 環境変数は、スーパーグローバルと同様に getenv
メソッドを使用して利用できるようになります。
$s3_bucket = getenv('S3_BUCKET');$s3_bucket = $_ENV;$s3_bucket = $_SERVER;
変数の入れ子
環境変数の中に別の変数を入れ子にすることが可能で、繰り返しを減らすのに便利です。
これは、既存の環境変数を ${…}
でラップすることで行います。例えば
BASE_DIR="/var/webroot/project-root"CACHE_DIR="${BASE_DIR}/cache"TMP_DIR="${BASE_DIR}/tmp"
Immutability and Repository Customization
不変性とは、Dotenv が既存の環境変数を上書きできるかということです。 Dotenv で既存の環境変数を上書きしたい場合は、createImmutable
の代わりに createMutable
を使用します:
$dotenv = Dotenv\Dotenv::createMutable(__DIR__);$dotenv->load();
舞台裏では、これは「リポジトリ」に不変性を許可するかしないかを指示しています。 デフォルトでは、リポジトリは既存の値を上書きできるように設定されています。これは、RepositoryBuilder
を使用して “create” メソッドを呼び出し、よりカスタムなリポジトリを構築する場合に関連します:
$repository = Dotenv\Repository\RepositoryBuilder::createWithNoAdapters() ->addAdapter(Dotenv\Repository\Adapter\EnvConstAdapter::class) ->addWriter(Dotenv\Repository\Adapter\PutenvAdapter::class) ->immutable() ->make();$dotenv = Dotenv\Dotenv::create($repository, __DIR__);$dotenv->load();
上記の例では、読み込んだ値を $_ENV
と putenv
に書き込みますが、環境変数の補間では、$_ENV
からのみの読み込みとします。 さらに、ファイルを読み込む前にすでに設定されている変数を置き換えることはない。
別の例により、リストアップを許可する変数のセットを指定することもできる。
$repository = Dotenv\Repository\RepositoryBuilder::createWithDefaultAdapters() ->allowList() ->make();$dotenv = Dotenv\Dotenv::create($repository, __DIR__);$dotenv->load();
Requiring Variables to be Set
PHP dotenv には、環境変数の存在を強制するための検証機能が組み込まれている。 これは、アプリがそれなしでは動作しないような明示的な必須変数を人々に知らせるのに特に便利です。
$dotenv->required('DATABASE_DSN');
単一の文字列、または文字列の配列が使用できます。
One or more environment variables failed assertions: DATABASE_DSN is missing
Empty Variables
単に変数が設定されていることを要求するだけでなく、変数が空でないことを確認する必要がある場合もあります。
$dotenv->required('DATABASE_DSN')->notEmpty();
環境変数が空の場合、例外が発生します:
One or more environment variables failed assertions: DATABASE_DSN is empty
Integer Variables
また、変数が整数値であることを確認する必要がある場合もあります。
$dotenv->required('FOO')->isInteger();
環境変数が整数でない場合、Exception:
One or more environment variables failed assertions: FOO is not an integer.
変数が設定されたときだけ検証ルールを実行したい場合があります。
$dotenv->ifPresent('FOO')->isInteger();
ブール変数
変数がブール値の形式であることを確認し、”true”, “false”, “On”, “1”, “Yes”, “Off”, “0” and “No” を受け入れる必要があるかもしれません。
$dotenv->required('FOO')->isBoolean();
環境変数がブール値でない場合は、例外が発生する:
One or more environment variables failed assertions: FOO is not a boolean.
同様に、次のように書くこともできる:
$dotenv->ifPresent('FOO')->isBoolean();
Allowed Values
環境変数があるべき値のセットを定義することも可能である。 これは、コードで実際にサポートされているオプションやドライバーがほんの一握りである場合に特に便利です:
$dotenv->required('SESSION_STORE')->allowedValues();
環境変数がこの許容値のリストにない場合、同様の例外が発生します:
One or more environment variables failed assertions: SESSION_STORE is not an allowed value.
また、環境変数があるべき正規表現を定義することも可能です。
$dotenv->required('FOO')->allowedRegexValues('(]{3})');
.env
ファイルに #
文字を使ってコメントすることができます。 例:
# this is a commentVAR="value" # commentVAR=value # comment
Parsing Without Loading
時には、ファイルを解析して、ネストした環境変数を解決したい場合があります。 これはすでに可能ですが、少し面倒なので、これを行う直接的な方法を提供します。
// Dotenv\Dotenv::parse("FOO=Bar\nBAZ=\"Hello ${FOO}\"");
これは、
Dotenv\Dotenv::createArrayBacked(__DIR__)->load();
とまったく同じですが、ファイルを見つけるためにディレクトリを提供する代わりに、ファイルのコンテンツを直接提供しました。
使用上の注意
新しい開発者があなたのコードベースをクローンするとき、彼らは手動で .env.example
ファイルを .env
にコピーし、独自の値を入力する (またはプロジェクトの同僚から機密の値を取得する) という追加のワンタイム手順を踏む必要があります。 すべてのセキュリティ脆弱性には迅速に対応します。
License
PHP dotenv は BSD 3-Clause License の下でライセンスされています。
For Enterprise
Tidelift Subscription
の一部として利用可能です。