Skip navigation
Help

conf_path

6 bootstrap.inc conf_path($require_settings = TRUE, $reset = FALSE)
7 bootstrap.inc conf_path($require_settings = TRUE, $reset = FALSE)

Finds the appropriate configuration directory.

Finds a matching configuration directory by stripping the website's hostname from left to right and pathname from right to left. The first configuration file found will be used and the remaining ones will be ignored. If no configuration file is found, return a default value '$confdir/default'.

With a site located at http://www.example.com:8080/mysite/test/, the file, settings.php, is searched for in the following directories:

1. $confdir/8080.www.example.com.mysite.test 2. $confdir/www.example.com.mysite.test 3. $confdir/example.com.mysite.test 4. $confdir/com.mysite.test

5. $confdir/8080.www.example.com.mysite 6. $confdir/www.example.com.mysite 7. $confdir/example.com.mysite 8. $confdir/com.mysite

9. $confdir/8080.www.example.com 10. $confdir/www.example.com 11. $confdir/example.com 12. $confdir/com

13. $confdir/default

If a file named sites.php is present in the $confdir, it will be loaded prior to scanning for directories. It should define an associative array named $sites, which maps domains to directories. It should be in the form of:

$sites = array(
  'The url to alias' => 'A directory within the sites directory'
);

For example:

$sites = array(
  'devexample.com' => 'example.com',
  'localhost.example' => 'example.com',
);

The above array will cause Drupal to look for a directory named "example.com" in the sites directory whenever a request comes from "example.com", "devexample.com", or "localhost/example". That is useful on development servers, where the domain name may not be the same as the domain of the live server. Since Drupal stores file paths into the database (files, system table, etc.) this will ensure the paths are correct while accessed on development servers.

Parameters

bool $require_settings: Only configuration directories with an existing settings.php file will be recognized. Defaults to TRUE. During initial installation, this is set to FALSE so that Drupal can detect a matching directory, then create a new settings.php file in it.

bool $reset: Force a full search for matching directories even if one had been found previously. Defaults to FALSE.

Return value

The path of the matching directory.

25 calls to conf_path()

3 string references to 'conf_path'

File

drupal/includes/bootstrap.inc, line 356
Functions that need to be loaded on every Drupal request.

Code

function conf_path($require_settings = TRUE, $reset = FALSE) {
  $conf = &drupal_static(__FUNCTION__, '');

  if ($conf && !$reset) {
    return $conf;
  }

  $confdir = 'sites';

  $sites = array();
  if (file_exists(DRUPAL_ROOT . '/' . $confdir . '/sites.php')) {
    // This will overwrite $sites with the desired mappings.
    include(DRUPAL_ROOT . '/' . $confdir . '/sites.php');
  }

  $uri = explode('/', $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_FILENAME']);
  $server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
  for ($i = count($uri) - 1; $i > 0; $i--) {
    for ($j = count($server); $j > 0; $j--) {
      $dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i));
      if (isset($sites[$dir]) && file_exists(DRUPAL_ROOT . '/' . $confdir . '/' . $sites[$dir])) {
        $dir = $sites[$dir];
      }
      if (file_exists(DRUPAL_ROOT . '/' . $confdir . '/' . $dir . '/settings.php') || (!$require_settings && file_exists(DRUPAL_ROOT . '/' . $confdir . '/' . $dir))) {
        $conf = "$confdir/$dir";
        return $conf;
      }
    }
  }
  $conf = "$confdir/default";
  return $conf;
}