Include a Local Drupal Settings file for Environment Configuration and Overrides
How to create and include a local settings file to define and override
environment-specific variables, and keep sensitive things like your database
credentials and API keys safe.
At the bottom of settings.php, add the following code:
$local_settings = __DIR__ . '/settings.local.php';
if (file_exists($local_settings)) {
include $local_settings;
}
This allows for you to create a new file called settings.local.php within a
sites/* directory (the same place as settings.php), and this will be included
as an extension of settings.php. You can see the same technique being used
within Drupal 8's
default.settings.php
file.
Environment specific settings like $databases and $base_url can be placed
within the local settings file. Other settings like
$conf['locale_custom_strings_en'] (string overrides) and
$conf['allow_authorize_operations'] that would apply to all environments can
still be placed in settings.php.
settings.php though is ignored by default by Git by a .gitignore file, so it
won't show up as a file available to be committed. There are two ways to fix
this. The first is to use the --force option when adding the file which
overrides the ignore file:
git add --force sites/default/settings.php
The other option is to update the .gitignore file itself so that settings.php is
no longer ignored. An updated .gitignore file could look like:
# Ignore configuration files that may contain sensitive information.
sites/*/settings.local*.php
# Ignore paths that contain user-generated content.
sites/*/files
sites/*/private
This will allow for settings.php to be added to Git and committed, but not
settings.local.php.
Was this interesting?
About me
I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.