Download the PHP package initphp/dotenv without Composer
On this page you can find all versions of the php package initphp/dotenv. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download initphp/dotenv
More information about initphp/dotenv
Files in initphp/dotenv
Package dotenv
Short Description Loads environment variables from a .env or .env.php file, with type coercion and ${VAR} interpolation.
License MIT
Informations about the package dotenv
InitPHP DotENV
Loads environment variables from a .env or .env.php file into PHP's
environment ($_ENV, $_SERVER, getenv()), with type coercion and
${VAR} interpolation.
Requirements
- PHP 8.0 or higher
- No extensions beyond the PHP core
Installation
Quick start
/home/www/.env:
Prefer an isolated instance (e.g. for DI or tests)? Use the Repository
directly:
File format in brief
KEY = VALUE— split on the first=; whitespace around the key is trimmed.- Comments start a line with anything other than a letter/digit/
_/-(#,;,//); inline comments start at a#preceded by whitespace. - Quote a value (
"..."or'...') to keep it verbatim, including a leading#such as#ffffff. ${OTHER}references are expanded when the value is read.true/false/null/emptyand round-tripping numbers are coerced; everything else stays a string.
Full details: docs/.
API summary
| Call | Returns | Purpose |
|---|---|---|
DotENV::create(string $path, bool $debug = true) |
void |
Load a .env/.env.php file or a directory containing one. |
DotENV::get(string $name, mixed $default = null) |
mixed |
Read a value ($_ENV → $_SERVER → getenv()). |
DotENV::env(string $name, mixed $default = null) |
mixed |
Alias of get(). |
DotENV::flush() |
void |
Unload everything this instance defined. |
DotENV::reset() |
void |
flush() and drop the shared instance. |
DotENV::drift(string\|array $reference, array $options = []) |
DriftReport |
Compare the loaded env against a reference and report drift. |
DotENV::assertNoDrift(string\|array $reference, array $options = []) |
void |
Strict mode: throw DriftException when drift is found. |
env(string $name, mixed $default = null) |
mixed |
Global helper for DotENV::get(). |
env_drift(string\|array $reference, array $options = []) |
DriftReport |
Global helper for DotENV::drift(). |
See the API reference for details.
Env drift
Once an env file is loaded you can check it for drift against a reference — the keys that should be present. It catches the failure that bites in CI/production: a key your code expects that was never provisioned.
The reference can be a .env.example path (the usual convention) or a
required-keys array:
Drift is grouped into three buckets:
| Bucket | Meaning | Default |
|---|---|---|
| missing | a reference key absent from the actual environment | always reported |
| extra | a key this loader defined that is not in the reference | opt-in (['extra' => true]) |
| empty | a reference key that is present but blank | opt-in (['empty' => true]) |
extra and empty are off by default: extra keys are usually noise, and only
keys this loader defined are ever considered for extra (unrelated OS
variables are never reported).
Strict mode (CI gate)
assertNoDrift() runs the same comparison and throws a
DriftException the moment any drift is found — drop it
into a bootstrap or a CI check to fail fast:
DriftException extends DotENVException (and InvalidArgumentException), so
existing catch blocks keep working, and the offending DriftReport is attached
via getReport().
Drift checking is read-only: it never defines, reads-through, or mutates any
environment value, so it is safe to run after create() without changing what
is loaded. See docs/env-drift.md for the full reference.
Notes
- Immutability: values already in
$_ENVor$_SERVERare never overwritten, so real environment variables win over a committed.env. $debug: whenfalse,create()swallows every error (missing file, wrong type, unreadable) instead of throwing aDotENVException.- Security: keep
.envfiles out of the web root, and remember a.env.phpfile is executed as code — see the security notes.
Upgrading from 2.x
3.0 is a maintenance-focused major release. The public API (DotENV::create,
get, env and the env() helper) is unchanged, but note:
- PHP 8.0+ is now required (was 5.6+).
- Numbers are only coerced when it is loss-free.
007and+90555…now stay strings instead of becoming7and a float. - Real bug fixes change previously broken results: directory-path loading,
multiple
${VAR}references on one line, quoted values with spaces around=, and values like#ffffffall work now. - The internal
Libclass is renamedRepository;Libremains as a deprecated alias.
See the changelog for the full list.
Contributing
Bug reports and pull requests are welcome. The CI runs PHP-CS-Fixer, PHPStan (max level) and PHPUnit across PHP 8.0–8.4; run the same bundle locally with:
Credits
License
Copyright © 2022 InitPHP — released under the MIT License.