enjoys / dotenv
从 .env 文件中注册环境变量
3.0.8
2023-08-31 07:20 UTC
Requires
- php: ^8.0
Requires (Dev)
- infection/infection: ^0.26
- phpunit/phpunit: ^9.6
- symfony/var-dumper: ^v6.0
- vimeo/psalm: ^5.15
- dev-master
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 3.0.0-RC2
- 3.0.0-rc1
- 3.0.0-beta3
- 3.0.0-beta2
- 3.0.0-beta1
- 3.0.0-alpha6
- 3.0.0-alpha5
- 3.0.0-alpha4
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha1
- 2.x-dev
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.x-dev
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-support_php_7_4
This package is auto-updated.
Last update: 2024-09-30 01:30:26 UTC
README
Парсер .env файлов.
根据 APP_ENV 加载 .env.dist、.env 和其他文件。例如,如果 APP_ENV=test,则尝试加载 .env.test
配置文件优先级
- 首先加载 dist 文件,但它的优先级最低。
- 然后加载主文件 (.env),其中定义的所有参数将覆盖 dist
- 最后是环境变量文件,如果它存在。其中定义的所有参数将具有最高优先级,并覆盖前面的值。此文件不是必需的。
- 通过系统设置的环境变量(例如通过 export 等)具有最高优先级,因为它们不会被覆盖
安装
composer require enjoys/dotenv
使用
use Enjoys\Dotenv\Dotenv; # loaded line __DIR__.'/.env.dist -> __DIR__.'/.env' -> __DIR__.'/.env.<APP_ENV> (repeat.env.<APP_ENV> if redefined) $dotenv = new Dotenv(__DIR__.'/.env'); // config available in $_ENV $dotenv->loadEnv(); # config available in $_ENV and getenv() # $dotenv->loadEnv(true);
.env 文件格式
VAR1 = value # можно использовать пробелы вокруг знака `=` VAR2=value2 VAR3="this is value #3" VAR4=value 4 #return `value 4 VAR5=${VAR4}2 # variable, return `value 42` VAR6="it\'s a beautiful life" VAR7 # if set Parser::AUTO_CAST_VALUE_TYPE return `null`, else empty string VAR8= #return empty string VAR9=${NOT_DEFINED_VAR:-value} # VAR9='value', but NOT_DEFINED_VAR - not set VAR10=${NOT_DEFINED_VAR:=value} # VAR10='value' and NOT_DEFINED_VAR='value' VAR10=${NOT_DEFINED_VAR:?} # throw Exception
附加功能
类型转换
所有 .env 文件中的值都是字符串(string),但有时将值转换为相应类型会更方便。这可以通过使用方法 enableCastType()
并设置属性 $castType 为 true 来实现。
use Enjoys\Dotenv\Dotenv; $dotenv = new Dotenv(__DIR__.'/.env'); $dotenv->enableCastType(); $dotenv->loadEnv();
...或通过使用 Dotenv::CAST_TYPE_ENV_VALUE
标志
use \Enjoys\Dotenv\Dotenv; $dotenv = new Dotenv(__DIR__.'/.env', flags: Dotenv::CAST_TYPE_ENV_VALUE); $dotenv->loadEnv();
以下是一些变量转换的示例
VAR = *true #bool(true) VAR = true #bool(true) VAR = *false #bool(false) VAR = false #bool(false) VAR = *bool somethig #bool(true) VAR = *bool #bool(false) VAR = *int 42 #int(42) VAR = "*int 42" #string VAR = 42 #int(42) VAR = '42' #string VAR = 3.14 #float(3.14) VAR = 3,14 #float(3.14) VAR = *float 3,14 #float(3.14) VAR = *double 3.14 #float(3.14) VAR = "3.14" #string #и т.д.
- *bool - 返回 bool(true) 或 bool(false)
- *true - 返回 bool(true)
- *false - 返回 bool(false)
- *null - 返回 NULL
- *int
*int 42
返回 int(42) - *int8
- *int16
- *float 或 *double
*float 3,14
返回 float(3.14),逗号自动替换为点 - *string -
*string *int
返回 string(4) "*int"
注意 类型转换仅在当前库使用时有效,在解析文件时使用其他库或系统时,值可能不会被转换为类型。
默认变量值
如果变量未设置,可以定义默认值。有两种方式可以实现这一点
${VAR:-default}
- 在这种情况下,如果变量未设置,将返回冒号后面的值,变量本身也将保持未设置状态,否则将返回变量的值。${VAR:=default}
- 在这种情况下,如果变量未设置,将返回冒号后面的值,并将变量设置为该值,否则将返回变量的值。
注意! 如果变量未设置且未提供默认值,则将返回空字符串。
要在这种情况下引发错误,可以在变量名称后指定 :?
或 :?message
。如果变量未设置,将抛出 \Enjoys\Dotenv\Exception\InvalidArgumentException
异常
例如
VAR1=${NOT_DEFINED_VAR:?extended error message} #with error message VAR2=${NOT_DEFINED_VAR:?} #or just with empty error message
可用标志
- CLEAR_MEMORY_AFTER_LOAD_ENV - 在将所有值设置为 $_ENV、$_SERVER 或 putenv() 后清除内存
- CAST_TYPE_ENV_VALUE - 根据内容(string|bool|int|float|null)进行类型转换
- POPULATE_PUTENV - 将可用的值除了 $_ENV 之外也通过 getenv() 提供
- POPULATE_SERVER - 将可用的值除了 $_ENV 之外也通过 $_SERVER 提供
标志可以通过 |
组合,例如 Dotenv::CAST_TYPE_ENV_VALUE|Dotenv::POPULATE_PUTENV