How to load different environment .env files in Laravel for local and production environment? Here is how:

 

To load different .env file for our local or environment, we will create 2 new env files .env.local and env.production. Easiest way is just to copy existing .env and rename it to look like this:

Next step, open bootstrap/app.php and add this code:

                    /*
|--------------------------------------------------------------------------
| Load Environment File on Startup
|--------------------------------------------------------------------------
|
| This will determine, which environment will be loaded for our application.
|
*/
$env = $app->detectEnvironment(function() {
    return getenv('APP_ENV') ?: 'local';

});


$app->loadEnvironmentFrom(".env.{$env}");
                  

so your bootstrap/app.php now will look like this:

                    <?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

/*
|--------------------------------------------------------------------------
| Load Environment File on Startup
|--------------------------------------------------------------------------
|
| This will determine, which environment will be loaded for our application.
|
*/
$env = $app->detectEnvironment(function() {
    return getenv('APP_ENV') ?: 'local';

});


$app->loadEnvironmentFrom(".env.{$env}");

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/

return $app;

                  

next step is .... there is no next step 😁...this is it, your Laravel application is now capable of loading two different environment files based on environment. You can put your local env settings in .env.local and production settings in .env.production.  which means- you can only upload .env.production to your production server