adhocore/env

PHP 环境变量加载和检索器

v0.1.0 2020-01-09 16:23 UTC

This package is auto-updated.

Last update: 2024-09-06 09:56:07 UTC


README

Latest Version Travis Build Scrutinizer CI Codecov branch StyleCI Software License

  • PHP 环境变量加载和检索器。
  • 如果加载了 filter 扩展,可以在检索时应用消毒/过滤器。
  • 使用 env 来配置应用程序是 12 个法则 之一。

安装

composer require adhocore/env

使用

加载

use Ahc\Env\Loader;

// Load env variables from .env file to `putenv` by default:
(new Loader)->load('/project/root/.env');

// Pass in boolean second param to control if the env should be reloaded:
(new Loader)->load('/project/root/.env', true);

// Load to $_SERVER global:
(new Loader)->load('/project/root/.env', true, Loader::SERVER);

// Load to $_ENV global and putenv():
(new Loader)->load('/project/root/.env', true, Loader::ENV | Loader::PUTENV);

// Load to all targets:
(new Loader)->load('/project/root/.env', true, Loader::ALL);

.env 文件中,始终用双引号括住复杂数值。例如:APP_KEY="K&^%*&^D(?<µ}^(P[X"

ENV 格式

支持 #; 注释。字面双引号应该转义为 ""。下面有更多示例。

# comment line
a=1
b="2"
c=$3#
; also comment line
d="lol"
# empty
e=
# f is `"6"`
f=""6""
1_2=one_two
# empty too
E=""
A_B=Apple Ball
x=Y

可以如此引用

MAIN=1
REF=${MAIN}/2
REF2=${REF}/3
# below will not be parsed as INV is not resolved
REF3=${INV}

检索

use Ahc\Env\Retriever;

// Retrieve:
echo Retriever::getEnv($key);

// Default value:
echo Retriever::getEnv('PAYMENT_GATEWAY', 'stripe');

// Sanitization (pass third and optionally fourth parameters):
echo Retriever::getEnv('MYSQL_PORT', 3306, FILTER_VALIDATE_INT);

// Or you can use `env()` which is alias of `Retriever::getEnv()`:
echo env('THE_KEY');

有关消毒/过滤值的更多信息,请参阅 filter_var

基准测试

如果您感兴趣,这里有一个简单的 基准测试

注意事项

默认情况下,此库仅将 env 加载到 putenv()。请谨慎将机密凭证暴露在 $_ENV$_SERVER 中,因为错误捕捉器可能会记录这些。

尽管此库已经足够快,但在生产环境中,您可能希望通过按需加载来稍微提高性能。

if (!getenv('<LAST_ENV_APP_SHOULD_BE_AWARE_OF>')) {
    // Override false :)
    (new Loader)->load('/project/root/.env', false);
}

例如,如果您的应用程序最近引入了 FB_APP_ID 环境变量,但此值尚未在机器中硬编码,则将通过 .env 文件加载,否则您已经受保护。

鸣谢

该项目由 please 管理。