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
方法也理解数组。