devuri / env
一个简单的PHP库,用于访问 $_ENV。
v0.3.2
2024-04-18 19:58 UTC
Requires
- php: ^7.3 || ^7.4 || ^8.0
- devuri/encryption: ^0.3
Requires (Dev)
- 10up/phpcs-composer: dev-master
- phpstan/phpstan: ^1.8
- phpstan/phpstan-strict-rules: ^1.3
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.24 || ^5.0
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 文件。