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