devuri/env

一个简单的PHP库,用于访问 $_ENV。

v0.3.2 2024-04-18 19:58 UTC

This package is auto-updated.

Last update: 2024-09-18 20:49:13 UTC


README

Env Manager 是一个PHP包,旨在提供一种安全、灵活和面向对象的PHP应用程序环境变量管理方法。该包内置了对白名单和可选值加密的支持,确保您的应用程序以安全高效的方式处理环境变量。

功能

  • 白名单管理:安全地指定可访问哪些环境变量,防止未授权访问敏感信息。
  • 可选加密:使用自定义加密路径对环境变量值进行加密,增加安全层。
  • 类型转换:自动将环境变量值转换为适当的数据类型,包括整数和布尔值。
  • 灵活配置:轻松设置和更新白名单和加密路径,以满足应用程序的需求。

安装

要在项目目录中安装 Env Manager,请运行以下命令

composer require devuri/env

用法

基本用法

use Urisoft\Env;

// Initialize the Env with a whitelist of environment variables
$env = new Env([
    'APP_KEY', 'DB_HOST', 'DB_NAME', // Add your environment variables here
]);

// Retrieve an environment variable
$dbHost = $env->get('DB_HOST');

// Retrieve an environment variable with a default value
$debugMode = $env->get('DEBUG_MODE', false);

带加密

要使用加密功能,请确保您已设置加密路径,并且 Encryption 类已正确配置。

$env = new Env([], '/path/to/encryption/key');

// Retrieve and encrypt an environment variable
$encryptedAppKey = $env->get('APP_KEY', 'secret value', true );

更新白名单

您可以使用 setWhitelist 方法随时更新白名单。

$env->setWhitelist([
    'NEW_VAR_1', 'NEW_VAR_2', // Add new variables as needed
]);

创建便利包装器

要创建一个充当方便包装器的函数,该函数用于实例化和使用您的 Env 类,您可以在全局作用域(或如果您喜欢保持组织性,则是在特定命名空间内)中定义一个函数。此函数可以初始化 Env 类,使用预定义设置(如白名单和加密路径),然后返回 Env 对象的实例或特定值。

以下是一个实现此类函数的示例

use Urisoft\Env;

/**
 * Retrieves a sanitized, and optionally encrypted or modified, environment variable by name.
 *
 * @param string $name             The name of the environment variable to retrieve.
 * @param mixed  $default Default value to return if the environment variable is not set
 * @param bool   $encrypt       Indicate that the value should be encrypted. Defaults to false.
 * @param bool   $strtolower       Whether to convert the retrieved value to lowercase. Defaults to false.
 *
 * @throws InvalidArgumentException If the requested environment variable name is not in the whitelist
 *                                  or if encryption is requested but the encryption path is not defined.
 *
 * @return mixed The sanitized environment variable value, possibly encrypted or typecast,
 *               or transformed to lowercase if specified.
 */
function env( $name, $default = null, $encrypt = false, $strtolower = false ) {
    // Define your whitelist and encryption path here. These could also be fetched from a configuration file or another source.
    $whitelist = [
        // Add your environment variables to the whitelist
    ];

    $encryptionPath = '/path/to/your/encryption/key';

    // Create an instance of the Env class with your predefined settings
    static $env = null;
    if ($env === null) {
        $env = new Env($whitelist, $encryptionPath);
    }

    // Use the Env instance to get the environment variable value
    return $env->get($name, $default, $encrypt, $strtolower);
}

注意

  • 静态变量:该函数使用静态变量来存储 Env 实例。这意味着相同的 Env 对象在单个请求中重复使用,这很有效,因为它避免了每次调用函数时重新实例化 Env 类的开销。
  • 配置:在此示例中,白名单和加密路径是硬编码的,但您可能希望从配置文件或环境变量中加载这些内容,以便使函数更灵活且与环境相关。
  • 全局与命名空间:根据您的应用程序架构,您可以将此函数放置在全局命名空间中(如所示)或特定命名空间内。如果放置在命名空间内,请记住在调用函数时正确引用它。
  • 可重用性:此方法可以轻松地在应用程序中使用 env 函数获取环境变量,利用 Env 类的全部功能,同时使用最少的样板代码。

然后您可以使用此函数在应用程序中统一获取环境变量,如下所示

$dbHost = env('DB_HOST');
$debugMode = env('DEBUG_MODE', false);

根据应用程序需求调整实现细节,例如白名单和加密路径。

安全性

Env Manager 包含白名单功能,以确保只有预定义的环境变量可访问,为您的应用程序添加额外的安全层。当使用加密功能时,请确保您的加密密钥安全存储,并且不可被未经授权的用户访问。

贡献

欢迎为 Urisoft Env Manager 做贡献!请确保您的贡献遵循项目的编码标准,并包含新功能或错误修复的测试。

许可证

在 MIT 许可证下授权。有关详细信息,请参阅LICENSE 文件。