-
Notifications
You must be signed in to change notification settings - Fork 0
Env
Ray Fung edited this page Feb 26, 2026
·
3 revisions
Razy provides a static .env file loader that parses environment variables and populates $_ENV, $_SERVER, and putenv(). It supports variable interpolation, multiline values, auto-casting, and the export prefix.
- Quick Start
- Loading .env Files
- Reading Variables
- Setting Variables
- .env File Syntax
- Auto-Casting
- API Reference
use Razy\Env;
// Load .env file
Env::load(__DIR__ . '/.env');
// Read values
$dbHost = Env::get('DB_HOST', 'localhost');
$debug = Env::get('APP_DEBUG'); // auto-cast: 'true' ??true
// Required values (throws RuntimeException if missing)
$secret = Env::getRequired('APP_SECRET');use Razy\Env;
// Load ??throws RuntimeException if file not found
Env::load('/path/to/.env');
// Load with overwrite ??overrides existing env variables
Env::load('/path/to/.env', overwrite: true);
// Load if exists ??silently skip if file doesn't exist
$loaded = Env::loadIfExists('/path/to/.env.local'); // returns bool
$loaded = Env::loadIfExists('/path/to/.env.local', overwrite: true);
// Check initialization state
Env::isInitialized(); // true after first load()
// Parse raw content without loading into environment
$vars = Env::parse(file_get_contents('.env'));
// Returns: ['DB_HOST' => 'localhost', 'DB_PORT' => '3306', ...]use Razy\Env;
// Get with default
$host = Env::get('DB_HOST', 'localhost');
// Get with auto-casting enabled (default)
$debug = Env::get('APP_DEBUG'); // 'true' ??true (bool)
$port = Env::get('DB_PORT'); // remains string '3306'
// Get without casting
$raw = Env::get('APP_DEBUG', null, cast: false); // 'true' (string)
// Check existence
if (Env::has('REDIS_URL')) {
$redis = Env::get('REDIS_URL');
}
// Required ??throws RuntimeException if not set
$secret = Env::getRequired('APP_SECRET');
$apiKey = Env::getRequired('API_KEY', cast: false);
// Get all loaded variables
$all = Env::all(); // ['DB_HOST' => 'localhost', 'APP_DEBUG' => 'true', ...]Resolution order: loaded cache ??$_ENV ??$_SERVER ??getenv()
use Razy\Env;
// Set a variable (updates $_ENV, $_SERVER, and putenv)
Env::set('CUSTOM_VAR', 'custom_value');
// Reset all loaded state
Env::reset();APP_NAME=MyApp
DB_HOST=localhost
DB_PORT=3306# Double-quoted ??supports escape sequences and interpolation
APP_TITLE="My Application"
GREETING="Hello, ${APP_NAME}!"
# Single-quoted ??literal (no interpolation, no escapes)
REGEX='^[a-z]+$'
# Unquoted ??trimmed, no interpolation
SIMPLE_VALUE=hello world# This is a comment
APP_NAME=MyApp # Inline comments in unquoted values
APP_DESC="Has # inside" # Hash inside quotes is not a commentexport APP_ENV=production
export DB_HOST=db.example.comOnly in double-quoted values:
BASE_URL="https://example.com"
API_URL="${BASE_URL}/api/v1"
FULL_URL="$BASE_URL/api"Only in double-quoted values:
RSA_KEY="-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0Z3VS5JJcds3xfn/yQ==
-----END RSA PRIVATE KEY-----"In double-quoted values:
| Sequence | Result |
|---|---|
\\ |
Backslash |
\" |
Double quote |
\n |
Newline |
\r |
Carriage return |
\t |
Tab |
\$ |
Literal dollar sign |
EMPTY_VALUE=
ALSO_EMPTY=""When $cast = true (default), the following string values are converted:
| .env Value | PHP Type | PHP Value |
|---|---|---|
true |
bool |
true |
false |
bool |
false |
null |
null |
null |
(empty) |
string |
'' |
// .env: APP_DEBUG=true
$debug = Env::get('APP_DEBUG'); // bool true
$debug = Env::get('APP_DEBUG', cast: false); // string 'true'
// .env: LOG_LEVEL=null
$level = Env::get('LOG_LEVEL'); // null
$level = Env::get('LOG_LEVEL', cast: false); // string 'null'| Method | Signature | Description |
|---|---|---|
load |
(string $path, bool $overwrite = false): void |
Load .env file (throws on missing) |
loadIfExists |
(string $path, bool $overwrite = false): bool |
Load if file exists |
parse |
(string $content): array |
Parse raw content to key-value array |
get |
(string $key, mixed $default = null, bool $cast = true): mixed |
Get variable |
has |
(string $key): bool |
Check existence |
set |
(string $name, string $value): void |
Set variable |
all |
(): array |
All loaded variables |
isInitialized |
(): bool |
Check if loaded |
getRequired |
(string $key, bool $cast = true): mixed |
Get or throw RuntimeException |
reset |
(): void |
Clear all loaded state |