環境変数を.env
からgetenv()
、 $_ENV
、および$_SERVER
に自動的にロードします。
機密の資格情報をコード内に保存しないでください。環境内に構成を保存することは、12 要素アプリの原則の 1 つです。データベース認証情報やサードパーティ サービスの認証情報など、展開環境間で変更される可能性のあるものはすべて、コードから抽出して環境変数に入れる必要があります。
基本的に、 .env
ファイルは、.htaccess ファイルや Apache/nginx 仮想ホストを変更することなく、アプリケーションに必要なカスタム構成変数をロードする簡単な方法です。つまり、プロジェクト外部のファイルを編集する必要がなく、Apache、Nginx、CLI、さらには PHP の組み込み Web サーバーなど、プロジェクトの実行方法に関係なく、すべての環境変数が常に設定されます。これは、環境変数を設定する他の方法よりもはるかに簡単で、きっと気に入っていただけるでしょう。
php_value
フラグを追加することはできませんPHP dotenv は、オリジナルの Ruby dotenv の PHP バージョンです。
インストールは Composer 経由で非常に簡単です。
$ composer require vlucas/phpdotenv
または、 composer.json
ファイルに手動で追加します。
私たちはセマンティック バージョニングに従っています。これは、メジャー リリース間で重大な変更が発生する可能性があることを意味します。ここでは、V2 から V3、V3 から V4、V4 から V5 へのアップグレード ガイドを入手できます。
.env
ファイルには機密性の高い API キーやパスワードが含まれる可能性があるため、通常はバージョン管理の対象外となります。機密性の高い環境変数を除き、必要なすべての環境変数が定義された別の.env.example
ファイルが作成されます。これらの環境変数は、ユーザーが独自の開発環境用に指定するか、他の場所でプロジェクトの共同作業者に伝達されます。次に、プロジェクトの共同作業者は、独自に.env.example
ファイルをローカルの.env
にコピーし、すべての設定がローカル環境に対して正しいことを確認し、必要に応じて秘密キーを入力するか独自の値を指定します。この使用法では、共同作業者によってコミットされないように、 .env
ファイルをプロジェクトの.gitignore
ファイルに追加する必要があります。この使用法により、機密のパスワードや API キーがバージョン管理履歴に残らないため、セキュリティ侵害のリスクが軽減され、本番環境の値をプロジェクトの共同作業者全員と共有する必要がなくなります。
アプリケーション構成をプロジェクトのルートにある.env
ファイルに追加します。コードにチェックインされないように、 .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 ' ];
$ s3_bucket = $ _SERVER [ ' S3_BUCKET ' ];
getenv()
およびputenv()
は、これらの関数がスレッドセーフではないため、使用しないことを強くお勧めします。ただし、これらの関数を使用するように PHP dotenv に指示することは可能です。 Dotenv::createImmutable
呼び出す代わりに、 Dotenv::createUnsafeImmutable
を呼び出すことができます。これにより、舞台裏でPutenvAdapter
が追加されます。環境変数は、スーパーグローバルだけでなくgetenv
メソッドを使用して利用できるようになります。
$ s3_bucket = getenv ( ' S3_BUCKET ' );
$ s3_bucket = $ _ENV [ ' S3_BUCKET ' ];
$ s3_bucket = $ _SERVER [ ' S3_BUCKET ' ];
環境変数を別の環境変数内にネストすることができ、繰り返しを減らすのに役立ちます。
これは、既存の環境変数を${…}
でラップすることによって行われます。例:
BASE_DIR= " /var/webroot/project-root "
CACHE_DIR= " ${BASE_DIR} /cache "
TMP_DIR= " ${BASE_DIR} /tmp "
不変性とは、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 ([ ' FOO ' , ' BAR ' ])
-> make ();
$ dotenv = Dotenv Dotenv :: create ( $ repository , __DIR__ );
$ dotenv -> load ();
PHP dotenv には、環境変数の存在を強制するなどの検証機能が組み込まれています。これは、アプリがそれなしでは動作しない明示的に必要な変数を人々に知らせるのに特に役立ちます。
単一の文字列を使用できます。
$ dotenv -> required ( ' DATABASE_DSN ' );
または文字列の配列:
$ dotenv -> required ([ ' DB_HOST ' , ' DB_NAME ' , ' DB_USER ' , ' DB_PASS ' ]);
ENV 変数が欠落している場合、Dotenv は次のようにRuntimeException
をスローします。
One or more environment variables failed assertions: DATABASE_DSN is missing
単に変数を設定する必要があるだけでなく、変数が空でないことを確認する必要がある場合もあります。
$ dotenv -> required ( ' DATABASE_DSN ' )-> notEmpty ();
環境変数が空の場合、例外が発生します。
One or more environment variables failed assertions: DATABASE_DSN is empty
変数が整数値であることを確認する必要がある場合もあります。次のことを行うことができます。
$ dotenv -> required ( ' FOO ' )-> isInteger ();
環境変数が整数でない場合は、例外が発生します。
One or more environment variables failed assertions: FOO is not an integer.
変数が設定されている場合にのみ検証ルールを適用したい場合があります。私たちはこれもサポートしています:
$ dotenv -> ifPresent ( ' FOO ' )-> isInteger ();
変数が「true」、「false」、「On」、「1」、「Yes」、「Off」、「0」、および「No」を受け入れるブール値の形式であることを確認する必要がある場合があります。次のことを行うことができます。
$ dotenv -> required ( ' FOO ' )-> isBoolean ();
環境変数がブール値でない場合は、例外が発生します。
One or more environment variables failed assertions: FOO is not a boolean.
同様に、次のように書くこともできます。
$ dotenv -> ifPresent ( ' FOO ' )-> isBoolean ();
環境変数が持つべき一連の値を定義することもできます。これは、実際にコードでサポートされているオプションやドライバーが少数である場合に特に役立ちます。
$ dotenv -> required ( ' SESSION_STORE ' )-> allowedValues ([ ' Filesystem ' , ' Memcached ' ]);
環境変数がこの許可される値のリストに含まれていない場合は、同様の例外が発生します。
One or more environment variables failed assertions: SESSION_STORE is not an allowed value.
環境変数に必要な正規表現を定義することもできます。
$ dotenv -> required ( ' FOO ' )-> allowedRegexValues ( ' ([[:lower:]]{3}) ' );
#
文字を使用して.env
ファイルにコメントを付けることができます。例えば
# this is a comment
VAR= " value " # comment
VAR=value # comment
ファイルを解析し、文字列を指定してネストされた環境変数を解決し、配列を返したい場合があります。これはすでに可能ですが、少し面倒なので、これを直接行う方法を用意しました。
// ['FOO' => 'Bar', 'BAZ' => 'Hello Bar']
Dotenv Dotenv :: parse ( " FOO=Bar n BAZ= " Hello $ {FOO} "" );
これは次とまったく同じです。
Dotenv Dotenv :: createArrayBacked ( __DIR__ )-> load ();
ファイルを検索するためのディレクトリを指定する代わりに、ファイルの内容を直接指定しているだけです。
新しい開発者がコードベースのクローンを作成する場合、 .env.example
ファイルを.env
に手動でコピーし、独自の値を入力する (またはプロジェクトの同僚から機密の値を取得する) という追加の 1 回限りの手順が必要になります。
特定のサーバー設定 (共有ホスティングで最も一般的) では、PHP が$_ENV
や$_SERVER
などのスーパーグローバルを非アクティブ化する場合があります。これらの変数が設定されていない場合は、 php.ini
ファイルのvariables_order
を確認してください。 php.net/manual/en/ini.core.php#ini.variables-order を参照してください。
このパッケージ内にセキュリティ上の脆弱性を発見した場合は、[email protected] に電子メールを送信してください。すべてのセキュリティの脆弱性は直ちに対処されます。当社の完全なセキュリティ ポリシーはここでご覧いただけます。
PHP dotenv は、BSD 3 条項ライセンスに基づいてライセンスされています。
Tidelift サブスクリプションの一部として利用可能
vlucas/phpdotenv
および他の何千ものパッケージのメンテナは、Tidelift と協力して、アプリケーションの構築に使用するオープンソースの依存関係に対する商用サポートとメンテナンスを提供しています。使用する正確な依存関係の保守者に料金を支払いながら、時間を節約し、リスクを軽減し、コードの健全性を向上させます。もっと詳しく知る。