function install_main

6.x install.php install_main()

The Drupal installation happens in a series of steps. We begin by verifying that the current environment meets our minimum requirements. We then go on to verify that settings.php is properly configured. From there we connect to the configured database and verify that it meets our minimum requirements. Finally we can allow the user to select an installation profile and complete the installation process.

Parameters

$phase: The installation phase we should proceed to.

1 call to install_main()
install.php in drupal-6.x/install.php
1 string reference to 'install_main'
get_t in drupal-6.x/includes/bootstrap.inc
Return the name of the localisation function. Use in code that needs to run both during installation and normal operation.

File

drupal-6.x/install.php, line 18

Code

function install_main() {
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);

  // This must go after drupal_bootstrap(), which unsets globals!
  global $profile, $install_locale, $conf;

  require_once './modules/system/system.install';
  require_once './includes/file.inc';

  // Ensure correct page headers are sent (e.g. caching)
  drupal_page_header();

  // Set up $language, so t() caller functions will still work.
  drupal_init_language();

  // Load module basics (needed for hook invokes).
  include_once './includes/module.inc';
  $module_list['system']['filename'] = 'modules/system/system.module';
  $module_list['filter']['filename'] = 'modules/filter/filter.module';
  module_list(TRUE, FALSE, FALSE, $module_list);
  drupal_load('module', 'system');
  drupal_load('module', 'filter');

  // Install profile chosen, set the global immediately.
  // This needs to be done before the theme cache gets 
  // initialized in drupal_maintenance_theme().
  if (!empty($_GET['profile'])) {
    $profile = preg_replace('/[^a-zA-Z_0-9]/', '', $_GET['profile']);
  }

  // Set up theme system for the maintenance page.
  drupal_maintenance_theme();

  // Check existing settings.php.
  $verify = install_verify_settings();

  if ($verify) {
    // Since we have a database connection, we use the normal cache system.
    // This is important, as the installer calls into the Drupal system for
    // the clean URL checks, so we should maintain the cache properly.
    require_once './includes/cache.inc';
    $conf['cache_inc'] = './includes/cache.inc';

    // Establish a connection to the database.
    require_once './includes/database.inc';
    db_set_active();

    // Check if Drupal is installed.
    $task = install_verify_drupal();
    if ($task == 'done') {
      install_already_done_error();
    }
  }
  else {
    // Since no persistent storage is available yet, and functions that check
    // for cached data will fail, we temporarily replace the normal cache
    // system with a stubbed-out version that short-circuits the actual
    // caching process and avoids any errors.
    require_once './includes/cache-install.inc';
    $conf['cache_inc'] = './includes/cache-install.inc';

    $task = NULL;
  }

  // No profile was passed in GET, ask the user.
  if (empty($_GET['profile'])) {
    if ($profile = install_select_profile()) {
      install_goto("install.php?profile=$profile");
    }
    else {
      install_no_profile_error();
    }
  }

  // Load the profile.
  require_once "./profiles/$profile/$profile.profile";

  // Locale selection
  if (!empty($_GET['locale'])) {
    $install_locale = preg_replace('/[^a-zA-Z_0-9\-]/', '', $_GET['locale']);
  }
  elseif (($install_locale = install_select_locale($profile)) !== FALSE) {
    install_goto("install.php?profile=$profile&locale=$install_locale");
  }

  // Tasks come after the database is set up
  if (!$task) {
    global $db_url;

    if (!$verify && !empty($db_url)) {
      // Do not install over a configured settings.php.
      install_already_done_error();
    }

    // Check the installation requirements for Drupal and this profile.
    install_check_requirements($profile, $verify);

    // Verify existence of all required modules.
    $modules = drupal_verify_profile($profile, $install_locale);

    // If any error messages are set now, it means a requirement problem.
    $messages = drupal_set_message();
    if (!empty($messages['error'])) {
      install_task_list('requirements');
      drupal_set_title(st('Requirements problem'));
      print theme('install_page', '');
      exit;
    }

    // Change the settings.php information if verification failed earlier.
    // Note: will trigger a redirect if database credentials change.
    if (!$verify) {
      install_change_settings($profile, $install_locale);
    }
    // The default lock implementation uses a database table,
    // so we cannot use it for install, but we still need
    // the API functions available.
    require_once './includes/lock-install.inc';
    $conf['lock_inc'] = './includes/lock-install.inc';
    lock_init();

    // Install system.module.
    drupal_install_system();

    // Ensure that all of Drupal's standard directories have appropriate
    // .htaccess files. These directories will have already been created by
    // this point in the installer, since Drupal creates them during the
    // install_check_requirements() task. Note that we cannot create them any
    // earlier than this, since the code below relies on system.module in order
    // to work.
    file_create_htaccess(file_directory_path());
    file_create_htaccess(file_directory_temp());

    // Save the list of other modules to install for the 'profile-install'
    // task. variable_set() can be used now that system.module is installed
    // and drupal is bootstrapped.
    variable_set('install_profile_modules', array_diff($modules, array('system')));
  }

  // The database is set up, turn to further tasks.
  install_tasks($profile, $task);
}