agashe/env-parser

用于处理env文件的强大PHP解析器

1.0.0 2023-10-04 11:30 UTC

This package is auto-updated.

Last update: 2024-09-04 13:51:22 UTC


README

用于处理env文件的强大PHP解析器。

特性

  • 易于使用,无需配置
  • 将.env文件转换为关联数组
  • 对数字、布尔值和NULL进行类型转换
  • 支持具有可选默认值的变量
  • 支持在.env文件中添加注释
  • 解析的数据保存在$_ENV和$_SERVER中
  • 支持使用getenv(...)读取解析数据

安装

composer require agashe/env-parser

文档

要在项目中使用env-parser,您需要声明一个新的EnvParser类的实例,然后调用接受单个参数(您的.env文件的路径)的parse方法。

<?php

require "vendor/autoload.php";

use EnvParser\Parser;

$parser = new Parser();

$data = $parser->parse('/path/to/my/env/file');

var_dump($data);

类型转换

默认情况下,env-parser对所有解析的数据进行类型转换,因此对于以下文件

TEST_BOOL=true
TEST_NULL=null
TEST_FLOAT=1.234

解析器将返回

array(3) {
  ["TEST_BOOL"]=>
  bool(true)
  ["TEST_NULL"]=>
  NULL
  ["TEST_FLOAT"]=>
  float(1.234)
}

$_ENV和$_SERVER

除了返回的结果外,env-parser还将提取的数据保存到$_ENV和$_SERVER中,因此您有多种方式可以访问您的数据。

$data = $parser->parse('/path/to/my/env/file');

echo $data['DATABASE_NAME']; // app_db
echo $_ENV['DATABASE_NAME']; // app_db
echo $_SERVER['DATABASE_NAME']; // app_db

使用getenv方法

PHP提供了两个用于处理环境变量的方法:putenv()getenv(),env-parser使用putenv()来保存您的.env文件提取的数据,因此您可以使用getenv()轻松访问它。

$data = $parser->parse('/path/to/my/env/file');

echo getenv('DATABASE_NAME'); // app_db

注释

您可以在.env文件中添加所有想添加的注释,env-parser将跳过所有注释并仅返回数据,因此假设您有以下.env文件

# MY DataBase Connection
DB_HOST = http://localhost # My database host
DB_NAME = "app_db" # My database name

它将被解析为

array(2) {
  ["DB_HOST"]=>
  string(16) "http://localhost"
  ["DB_NAME"]=>
  string(6) "app_db"
}

变量

Env-parser支持.env文件内的变量,因此您可以使用之前定义的键作为变量来使用其他键。

# Default email domain
EMAIL_DOMAIN = our-emails-domain.com

# Admin's default username
ADMIN_USERNAME = super-admin

# Admin's default email
ADMIN_EMAIL = ${ADMIN_USERNAME}@${EMAIL_DOMAIN}

上面的文件将被解析为

array(3) {
  ["EMAIL_DOMAIN"]=>
  string(21) "our-emails-domain.com"
  ["ADMIN_USERNAME"]=>
  string(11) "super-admin"
  ["ADMIN_EMAIL"]=>
  string(33) "super-admin@our-emails-domain.com"
}

您还可以为变量添加默认值,以防数据缺失

# Default email domain
EMAIL_DOMAIN = our-emails-domain.com

# Admin's default email
ADMIN_EMAIL = ${ADMIN_USERNAME:=admin}@${EMAIL_DOMAIN}

env-parser将使用您提供的默认数据

array(2) {
  ["EMAIL_DOMAIN"]=>
  string(21) "our-emails-domain.com"
  ["ADMIN_EMAIL"]=>
  string(27) "admin@our-emails-domain.com"
}

如果没有提供默认值,解析器将为该变量返回空字符串,但其他值将按正常方式解析。

示例

# .env file

# check basic functionality 
TEST_NO_QUOTES=Parser
TEST_SPACES    =     "1.0"
    TEST_QUOTES='test'

# check boolean values
TEST_TRUE=true
TEST_FALSE=false

# check nullable values
TEST_NULL =null
TEST_EMPTY =

# check numeric values
TEST_FLOAT= 1500.223
TEST_INT= 123

# check comments
TEST_COMMENT_1 = test#test comment
TEST_COMMENT_2 = "test#test"
TEST_COMMENT_3 = 'some text'        # test  # comment

# check variables
TEST_VAR="${TEST_QUOTES}/${TEST_NO_QUOTES}"
TEST_DEFAULT_VAL="${UNKNOWN:=test} or some text like ${TEST_NO_QUOTES}"

此.env文件将被解析为

array(14) {
  ["TEST_NO_QUOTES"]=>
  string(6) "Parser"
  ["TEST_SPACES"]=>
  string(3) "1.0"
  ["TEST_QUOTES"]=>
  string(4) "test"
  ["TEST_TRUE"]=>
  bool(true)
  ["TEST_FALSE"]=>
  bool(false)
  ["TEST_NULL"]=>
  NULL
  ["TEST_EMPTY"]=>
  string(0) ""
  ["TEST_FLOAT"]=>
  float(1500.223)
  ["TEST_INT"]=>
  int(123)
  ["TEST_COMMENT_1"]=>
  string(4) "test"
  ["TEST_COMMENT_2"]=>
  string(9) "test#test"
  ["TEST_COMMENT_3"]=>
  string(9) "some text"
  ["TEST_VAR"]=>
  string(11) "test/Parser"
  ["TEST_DEFAULT_VAL"]=>
  string(29) "test or some text like Parser"
}

许可

(Env-Parser) 在MIT许可条款下发布。