arrilot/dotenv-php

2.0.0 2017-06-25 10:50 UTC

This package is auto-updated.

Last update: 2024-09-21 00:14:17 UTC


README

Latest Stable Version Total Downloads Build Status Scrutinizer Quality Score

PHP的简单dotenv

简介

问题:这个包的用途是什么?它与已知的vlucas/phpdotenvjosegonzalez/php-dotenv包有何不同?

答案:那些优秀的包不是为生产环境设计的。它们始终是用于本地开发的。主要原因包括:

  1. 不够快
  2. 不够安全

许多人实际上误用了这些包,并在生产环境中使用它们来配置应用程序。

相比之下,这个包是用于生产环境的。它使用普通的PHP数组来存储.env内容,并且默认情况下不会修改$_ENV或$_SERVER。因此,它既快速又安全,但功能较少。

安装

  1. composer require arrilot/dotenv-php

  2. 创建.env.php文件来存储特定于环境或敏感的配置设置。

示例

<?php

return [
    'DB_USER' => 'root',
    'DB_PASSWORD' => 'secret',
];

此文件绝不应添加到版本控制中。

  1. 创建.env.example.php文件并将其添加到版本控制中。此文件应作为开发者如何查看.env.php文件样式的示例。

  2. 加载.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类。只需使用setload方法覆盖所需的内容。请注意,load方法也理解数组。