arrilot / dotenv-php
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-21 00:14:17 UTC
README
PHP的简单dotenv
简介
问题:这个包的用途是什么?它与已知的vlucas/phpdotenv和josegonzalez/php-dotenv包有何不同?
答案:那些优秀的包不是为生产环境设计的。它们始终是用于本地开发的。主要原因包括:
- 不够快
- 不够安全
许多人实际上误用了这些包,并在生产环境中使用它们来配置应用程序。
相比之下,这个包是用于生产环境的。它使用普通的PHP数组来存储.env内容,并且默认情况下不会修改$_ENV或$_SERVER。因此,它既快速又安全,但功能较少。
安装
-
composer require arrilot/dotenv-php
-
创建
.env.php
文件来存储特定于环境或敏感的配置设置。
示例
<?php return [ 'DB_USER' => 'root', 'DB_PASSWORD' => 'secret', ];
此文件绝不应添加到版本控制中。
-
创建
.env.example.php
文件并将其添加到版本控制中。此文件应作为开发者如何查看.env.php
文件样式的示例。 -
加载
.env.php
文件
use Arrilot\DotEnv\DotEnv; DotEnv::load('/path/to/.env.php');
使用方法
获取数据
最常用的用例是获取dotenv变量。
$dbUser = DotEnv::get('DB_USER');
您还可以传递第二个参数,如果变量未设置,则将其用作默认值。
$dbUser = DotEnv::get('DB_USER', 'admin');
注意:您将最频繁地使用此方法。添加全局助手以避免导入类名等是合理的。
function env($key, $default = null) { return \Arrilot\DotEnv\DotEnv::get($key, $default); } ... $dbUser = env('DB_USER', 'admin');
您也可以一次性获取所有dotenv变量
$variables = DotEnv::all();
设置数据
您可以通过这种方式设置或覆盖特定变量
DotEnv::set('DB_USER', 'admin'); DotEnv::set('DB_PASSWORD', 'secret'); // or DotEnv::set([ 'DB_USER' => 'root', 'DB_PASSWORD' => 'secret', ]);
您也可以完全从文件或数组重新加载所有变量
DotEnv::load('/path/to/new/.env.php'); //or DotEnv::load([ 'DB_USER' => 'root', 'DB_PASSWORD' => 'secret', ]);
其他方法
有一种确保特定dotenv变量存在的方法。示例
DotEnv::setRequired(['DB_USER', 'DB_PASSWORD']);
如果变量未加载,将抛出Arrilot\DotEnv\Exceptions\MissingVariableException
。
还有方便的方法将所有变量复制到putenv()
、$_ENV
或$_SERVER
,如果您确实需要的话,但在大多数情况下您不需要。
DotEnv::copyVarsToPutenv($prefix = 'PHP_'); // putenv() DotEnv::copyVarsToEnv(); // $_ENV DotEnv::copyVarsToServer() // $_SERVER
测试
问题:为什么有这么多静态调用?我应该如何在测试中模拟它们?
答案:您不应该模拟DotEnv
类。只需使用set
或load
方法覆盖所需的内容。请注意,load
方法也理解数组。