DEV Community

joukhar
joukhar

Posted on

how to edit .env file programmatically in Laravel

To programmatically edit the .env file in Laravel, you have two options. You can either create a Laravel function or use a package specifically designed for this purpose. I will explain both options below.

Option 1: Laravel Function

Here's an example of a Laravel function that allows you to programmatically edit the .env file:

<?php

use Illuminate\Support\Facades\File;

function updateEnvFile(array $data)
{
    $envFile = base_path('.env');

    if (File::exists($envFile)) {
        $content = File::get($envFile);

        foreach ($data as $key => $value) {
            $search = "$key=";
            $replace = "$key=$value";

            if (strpos($content, $search) !== false) {
                $content = preg_replace("/^$search.*$/m", $replace, $content);
            } else {
                $content .= PHP_EOL . $replace;
            }
        }

        File::put($envFile, $content);

        return true;
    }

    return false;
}
Enter fullscreen mode Exit fullscreen mode

Explanation:

  1. The function updateEnvFile accepts an array of key-value pairs. The keys represent the environment variable names, and the values represent the new values for those variables.
  2. The function first checks if the .env file exists using the File::exists method provided by Laravel's Filesystem. If the file doesn't exist, it returns false.
  3. If the file exists, it reads the content of the .env file using the File::get method.
  4. For each key-value pair, it searches for the corresponding key in the content of the file. If the key is found, it replaces the existing value with the new value using the preg_replace function. If the key is not found, it appends a new line with the key-value pair at the end of the content.
  5. Finally, it writes the modified content back to the .env file using the File::put method.

To use this function, you can pass an array of key-value pairs representing the variables you want to update:

updateEnvFile([
    'APP_ENV' => 'production',
    'APP_DEBUG' => 'false',
]);
Enter fullscreen mode Exit fullscreen mode

This example updates the APP_ENV and APP_DEBUG variables in the .env file.

Option 2: Laravel Package

Alternatively, you can use a Laravel package like "vlucas/phpdotenv" to manage the .env file programmatically. This package provides a simple API for working with .env files.

To use the "vlucas/phpdotenv" package, you need to install it using Composer:

composer require vlucas/phpdotenv
Enter fullscreen mode Exit fullscreen mode

Once the package is installed, you can update the .env file using the following code:

<?php

use Dotenv\Dotenv;

function updateEnvFile(array $data)
{
    $envFile = base_path('.env');

    if (file_exists($envFile)) {
        $dotenv = Dotenv::createMutable(base_path());
        $dotenv->load();

        foreach ($data as $key => $value) {
            putenv("$key=$value");
            $dotenv->setEnvironmentVariable($key, $value);
        }

        $dotenv->save();

        return true;
    }

    return false;
}
Enter fullscreen mode Exit fullscreen mode

Explanation:

  1. First, you need to require the Dotenv class from the "vlucas/phpdotenv" package.
  2. The updateEnvFile function is similar to the previous example but with a few changes.
  3. It loads the existing .env file using the Dotenv::createMutable method.
  4. For each key-value pair, it sets the environment variable using putenv and updates the in-memory environment variables using $dotenv->setEnvironmentVariable.
  5. Finally, it saves the changes back to the .env file using $dotenv->save().

You can use this function in the same way as the previous example:

updateEnvFile([
    'APP_ENV' => 'production',
    'APP_DEBUG' => 'false',
]);
Enter fullscreen mode Exit fullscreen mode

Both options allow you to programmatically edit the .env file in Laravel. Choose the option that best suits your project requirements and preferences.

For more posts like this, visit our website: builtbybuilder.com

Our Blog : builtbybuilder.com/blogs

Top comments (3)

Collapse
 
jimerman profile image
jimerman

Ok so kind of like Razor for .net. Cool.

Collapse
 
jimerman profile image
jimerman

I was wondering, what is Laravel? I've never heard of it before.

Collapse
 
joukhar profile image
joukhar

it is a php framework that makes development with php easier