You are here

function backup_migrate_perform_backup in Backup and Migrate 7.3

Same name and namespace in other branches
  1. 8.4 backup_migrate.module \backup_migrate_perform_backup()
  2. 8.2 backup_migrate.module \backup_migrate_perform_backup()
  3. 8.3 backup_migrate.module \backup_migrate_perform_backup()
  4. 5.2 backup_migrate.module \backup_migrate_perform_backup()
  5. 6.3 backup_migrate.module \backup_migrate_perform_backup()
  6. 6.2 backup_migrate.module \backup_migrate_perform_backup()
  7. 7.2 backup_migrate.module \backup_migrate_perform_backup()
  8. 5.0.x backup_migrate.module \backup_migrate_perform_backup()

Perform a backup with the given settings.

4 calls to backup_migrate_perform_backup()
backup_migrate_drush_backup in includes/backup_migrate.drush.inc
Backup the default database.
backup_migrate_schedule::run in includes/schedules.inc
Run the actual schedule.
backup_migrate_ui_manual_backup_perform in ./backup_migrate.module
Perform an actual manual backup and tell the user of the progress.
_backup_migrate_backup_with_defaults in ./backup_migrate.module
Backup the database with the default settings.

File

./backup_migrate.module, line 1584
Backup and restore databases for Drupal.

Code

function backup_migrate_perform_backup(&$settings) {
  require_once dirname(__FILE__) . '/includes/destinations.inc';
  require_once dirname(__FILE__) . '/includes/files.inc';
  require_once dirname(__FILE__) . '/includes/filters.inc';
  timer_start('backup_migrate_backup');
  _backup_migrate_set_timeout();

  // Conditionally increase the memory limit.
  // Get the current php memory limit.
  $php_memory_limit = ini_get('memory_limit');

  // If the memory limit is set to -1, there's no need to do anything.
  if ($php_memory_limit !== -1) {

    // Convert the php memory limit to bytes.
    $php_memory_limit_bytes = backup_migrate_to_bytes($php_memory_limit);

    // Get the current Backup Migrate memory limit.
    // Hint: To further increase the memory limit used by Backup Migrate add one
    // of the following line to the settings.php file:
    // * $conf['backup_migrate_memory_limit'] = '512M';
    // * $conf['backup_migrate_memory_limit'] = '1G';.
    $backup_migrate_memory_limit = variable_get('backup_migrate_memory_limit', BACKUP_MIGRATE_MEMORY_LIMIT);

    // Convert the Backup Migrate memory limit to bytes.
    $backup_migrate_memory_limit_bytes = backup_migrate_to_bytes($backup_migrate_memory_limit);

    // If not in 'safe mode', increase the memory limit.
    if (!ini_get('safe_mode') && $php_memory_limit_bytes < $backup_migrate_memory_limit_bytes) {

      // Ensure ini_set() is not disabled.
      if (!strpos(ini_get('disable_functions'), 'ini_set')) {

        // Convert bytes to megabytes, add the 'M' unit.
        $backup_migrate_memory_limit = round($backup_migrate_memory_limit_bytes / 1024 / 1024) . 'M';

        // Update the php memory limit.
        ini_set('memory_limit', $backup_migrate_memory_limit);
      }
    }
  }
  if (variable_get('backup_migrate_verbose')) {
    _backup_migrate_message("Memory limit: %limit", array(
      '%limit' => ini_get('memory_limit'),
    ), 'success');
  }

  // Confirm the destinations are valid.
  $valid = backup_migrate_destination_confirm_destination($settings);
  if (!$valid) {
    backup_migrate_backup_fail("Could not run backup because a there was no valid destination to save to.", array(), $settings);
    return FALSE;
  }

  // Create the temporary file object to be backed up into.
  $filename = _backup_migrate_construct_filename($settings);
  $file = new backup_file(array(
    'filename' => $filename,
  ));
  if (!$file) {
    backup_migrate_backup_fail("Could not run backup because a temporary file could not be created.", array(), $settings);
    return FALSE;
  }

  // Register shutdown callback to deal with timeouts.
  register_shutdown_function('backup_migrate_shutdown', $settings);
  if (variable_get('backup_migrate_verbose')) {
    watchdog('backup_migrate', "Starting backup: %file", array(
      '%file' => $file
        ->filename(),
    ));
  }
  $file = backup_migrate_filters_backup($file, $settings);
  if (!$file) {
    if (_backup_migrate_check_timeout()) {
      backup_migrate_backup_fail('Could not complete the backup because the script timed out. Try increasing your PHP <a href="!url">max_execution_time setting</a>.', array(
        '!url' => 'http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time',
      ), $settings);
    }
    else {
      backup_migrate_backup_fail("Could not complete the backup.", array(), $settings);
    }
    return FALSE;
  }
  if (variable_get('backup_migrate_verbose')) {
    watchdog('backup_migrate', "Preparing to save backup: %file", array(
      '%file' => $file
        ->filename(),
    ));
  }
  $file = backup_migrate_destination_save_file($file, $settings);
  if (!$file) {
    backup_migrate_backup_fail("Could not run backup because the file could not be saved to the destination.", array(), $settings);
    return FALSE;
  }
  if (variable_get('backup_migrate_verbose')) {
    watchdog('backup_migrate', "Backup succeeded: %file", array(
      '%file' => $file
        ->filename(),
    ));
  }

  // Backup succeeded.
  $time = timer_stop('backup_migrate_backup');
  $message = '%source backed up successfully to %file (%size) in destination %dest in !time. !action';
  $params = array(
    '%file' => $filename,
    '%dest' => $settings
      ->get_destination_name(),
    '%source' => $settings
      ->get_source_name(),
    '%size' => format_size($file
      ->filesize()),
    '!time' => backup_migrate_format_elapsed_time($time['time']),
    '!action' => !empty($settings->performed_action) ? $settings->performed_action : '',
  );
  if (($destination = $settings
    ->get_destination()) && ($links = $destination
    ->get_file_links($file
    ->file_id()))) {
    $params['!links'] = implode(", ", $links);
  }
  backup_migrate_backup_succeed($message, $params, $settings);
  return $file;
}