- Environment variable loader and retriever for PHP.
- Sanitization/Filters can be applied on retrieval if
filterextension is loaded. - Using env to configure application is one of the 12 postulates.
composer require adhocore/env use Ahc\Env\Loader; // Load env variables from .env file to `putenv` by default: (new Loader)->load('/project/root/.env'); // Pass in boolean second param to control if the env should be reloaded: (new Loader)->load('/project/root/.env', true); // Load to $_SERVER global: (new Loader)->load('/project/root/.env', true, Loader::SERVER); // Load to $_ENV global and putenv(): (new Loader)->load('/project/root/.env', true, Loader::ENV | Loader::PUTENV); // Load to all targets: (new Loader)->load('/project/root/.env', true, Loader::ALL);Always wrap complex values within double quotes in
.envfile. Eg:APP_KEY="K&^¢*&D(?<µ}^(P\]X"
Supports # or ; comments. Literal double quote should be escaped like "". See more examples below:
# comment line a=1 b="2" c=$3# ; also comment line d="lol" # empty e= # f is `"6"` f=""6"" 1_2=one_two # empty too E="" A_B=Apple Ball x=Y Reference is possible like so:
MAIN=1 REF=${MAIN}/2 REF2=${REF}/3 # below will not be parsed as INV is not resolved REF3=${INV} use Ahc\Env\Retriever; // Retrieve: echo Retriever::getEnv($key); // Default value: echo Retriever::getEnv('PAYMENT_GATEWAY', 'stripe'); // Sanitization (pass third and optionally fourth parameters): echo Retriever::getEnv('MYSQL_PORT', 3306, FILTER_VALIDATE_INT); // Or you can use `env()` which is alias of `Retriever::getEnv()`: echo env('THE_KEY');See filter_var for more on sanitizing/filtering values!
If you are interested here is a simple benchmark.
By default this library only loads env to putenv(). Be cautious exposing confidential credentials into $_ENV and $_SERVER which bug/error catchers may log.
Although this libray is already fast enough, in production you might want to boost performance a little by loading if only required:
if (!getenv('<LAST_ENV_APP_SHOULD_BE_AWARE_OF>')) { // Override false :) (new Loader)->load('/project/root/.env', false); }For example if your app last introduced FB_APP_ID env, but this value is not already hard set in the machine, it would be loaded via .env file else you are already covered.