jchook/dotenv-to-php

Convert dotenv files to PHP

Installs: 1 717

Dependents: 0

Suggesters: 0

Security: 0

Stars: 3

Watchers: 3

Forks: 0

Open Issues: 0

Language:Shell

v1.0.3 2018-06-23 23:21 UTC

This package is not auto-updated.

Last update: 2024-11-10 05:51:21 UTC


README

Convert dotenv files to PHP.

Demo of dotenv-to-php

Why use it?

Storing configuration in the environment is a tenant of a Twelve Factor App and has many advantages. For example, it allows you to keep your passwords separate from your code.

However, it's not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. In these scenarios, we can load variables from a .env as needed.

Instead of parsing a .env at runtime with complex PHP dependencies, we can use dotenv-to-php to compile our .env to native PHP.

  1. It's fast. The conversion is instantaneous. At runtime, simply load your env vars using the generated PHP. You can even use it in production.

  2. It's simple. No runtime dependency. The transpiler is only 42 lines with comments, contains no regex, and no custom parsers. Contrast this with phpdotenv.

1. Install

You can just download the one file -OR- add it as a dev dependency via composer:

composer require --dev jchook/dotenv-to-php

2. Create .env

If you don't already have one, create a .env file in the root directory of your project. Add all environment-specific variables (anything likely to change between servers or deployments) on individual lines like so:

# Application
APP_HOST="myapp.com"
APP_URI="https://$APP_HOST/"
APP_NAME="My Application"

# Database
DB_HOST=localhost
DB_USER=myapp
DB_PASS=mypass

Notice that you should quote values with spaces, etc. and that it's possible to reference previously defined variables as in normal shell environments. Comments beginning with # are ignored.

Do not commit your .env file to source control. Instead, store it somewhere secure, or use a tool like vault.

3. Build .env.php

Simply call bin/dotenv-to-php via command-line to convert your .env file to PHP.

/path/to/dotenv-to-php

Usage is roughly dotenv-to-php [infile] [outfile]. If no infile or outfile is specified, they default to .env and $infile.php respectively. You can also specify - (hyphen) for stdin or stdout... respectively.

4. Integrate

In your PHP application, simply include the compiled .env.php file. Your loaded environment variables will be available via $_SERVER, $_ENV, and getenv().

<?php

// somewhere in index.php
include_once __DIR__ . '/.env.php';

// Anywhere you need it...
echo $_SERVER['DB_USER']; // myapp

?>

Ideally you can integrate the .env.php file generation into your existing build process (either for CI or local development). All examples below assume that your dotenv file is saved in the current working directory as .env.

Composer

If you installed via composer, you can integrate it as a script in your composer.json file:

{
	"scripts": {
		"build-env": "dotenv-to-php .env .env.php"
	}
}

Then invoke via:

composer build-env

Node JS

Many folks are using node js to compile their static assets such as javascript. If you want to plug-in to this existing build process, you can use the built-in child_process module.

const childProcess = require('child_process');
childProcess.spawn('/path/to/dotenv-to-php', ['.env', '.env.php']);

Webpack 4+

You can easily incorporate the above into an ad-hoc webpack plugin. In your webpack.config.js file:

const childProcess = require('child_process');
module.exports = {
	
	// ... other config here ...
	
	plugins: [
		
		// ... other plugins here ...
		
		// Build PHP env
		{apply: (compiler) => {
			compiler.hooks.afterEnvironment.tap('DotEnvToPhp', (compilation) => {
				childProcess.spawn('/path/to/dotenv-to-php', ['.env', '.env.php']);
			});
		}}
	]
};

License

MIT.