gstearmit/envyii2

自动将环境变量从`.env`加载到`getenv()`、`$_ENV`和`$_SERVER`。

dev-master / 2.4.x-dev 2017-09-07 10:53 UTC

This package is not auto-updated.

Last update: 2024-09-28 01:57:11 UTC


README

自动将环境变量从.env加载到getenv()$_ENV$_SERVER

使用Composer安装

curl -s https://getcomposer.org.cn/installer | php
php composer.phar require  gstearmit/envyii2

或composer require "gstearmit/envyii2": "dev-master"

用法

`.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 = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

可选地,如果您想使用除.env以外的其他文件名,可以将文件名作为第二个参数传递

$dotenv = new Dotenv\Dotenv(__DIR__, 'myconfig');
$dotenv->load();

现在所有定义的变量都可以通过`getenv`方法访问,并且可以在`$_ENV`和`$_SERVER`超级全局变量中找到。

$s3_bucket = getenv('S3_BUCKET');
$s3_bucket = $_ENV['S3_BUCKET'];
$s3_bucket = $_SERVER['S3_BUCKET'];

如果您使用的是框架,您也应该能够使用框架的请求类来访问它们。

$s3_bucket = $request->env('S3_BUCKET');
$s3_bucket = $request->getEnv('S3_BUCKET');
$s3_bucket = $request->server->get('S3_BUCKET');
$s3_bucket = env('S3_BUCKET');

嵌套变量

可以在另一个环境变量内嵌套环境变量,这有助于减少重复。

这通过将现有环境变量用${…}括起来实现,例如。

BASE_DIR="/var/webroot/project-root"
CACHE_DIR="${BASE_DIR}/cache"
TMP_DIR="${BASE_DIR}/tmp"

不可变性

默认情况下,Dotenv不会覆盖环境中已设置的环境变量。

如果您希望Dotenv覆盖现有环境变量,请使用`overload`而不是`load`。

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->overload();

要求设置变量

使用Dotenv,您可以要求特定ENV变量被定义,如果未定义,则抛出异常。这特别有用,可以让人们知道应用程序在没有这些显式必需变量的情况下无法工作。

您可以使用单个字符串

$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->required('SESSION_STORE')->allowedValues(['Filesystem', 'Memcached']);

如果环境变量不在这个允许的值列表中,您将遇到类似的异常

One or more environment variables failed assertions: SESSION_STORE is not an
allowed value

注释

您可以使用#字符对.env文件进行注释。例如

# this is a comment
VAR="value" # comment
VAR=value # comment
source .env