1.20.x common.inc backdrop_page_footer()

Performs end-of-request tasks.

This function sets the page cache if appropriate, and allows modules to react to the closing of the page by calling hook_exit().

File

includes/common.inc, line 3142
Common functions that many Backdrop modules will need to reference.

Code

function backdrop_page_footer() {
  module_invoke_all('exit');

  // Commit the user session, if needed. This must be done before sending the
  // response, as it may set a cookie header.
  backdrop_session_commit();

  // In order to do post-delivery processing (e.g. cron run), we must close the
  // connection. Otherwise the connection will wait for PHP to finish before it
  // is used again in a subsequent request, such as for a JS or CSS file.
  if (!backdrop_is_background()) {
    header('Connection: close');
  }

  // Get the contents of the output buffer, which was started in
  // _backdrop_bootstrap_page_header().
  $page_length = ob_get_length();
  $page_content = ob_get_clean();

  if (config_get('system.core', 'cache') && backdrop_page_is_cacheable()) {
    $cache = backdrop_page_create_cache($page_content);
    // If this is a background request, there is no need to print the page to a
    // buffer that will never be sent to the browser.
    if (!backdrop_is_background()) {
      backdrop_serve_page_from_cache($cache);
    }
  }
  else {
    backdrop_set_length_headers($page_length);
    // Do not print body content on HTTP HEAD requests. See
    // backdrop_serve_page_from_cache() for further explanation.
    if ($_SERVER['REQUEST_METHOD'] !== 'HEAD') {
      print $page_content;
    }
  }

  // If we're not already in a background request, flush to the browser.
  if (!backdrop_is_background() && $_SERVER['REQUEST_METHOD'] !== 'HEAD') {
    // End the request and send the response to the browser. This call has
    // error suppression on it as some PHP versions may require it (PHP 5.3)
    // but other PHP versions throw a warning (PHP 5.5).
    @ob_end_flush();

    // Flushing for PHP-FPM based installations.
    if (function_exists('fastcgi_finish_request')) {
      fastcgi_finish_request();
    }
    // Flushing for Apache mod_php installations.
    else {
      flush();
    }
  }

  // Then continue background tasks without holding up the rest of the request.
  if (isset($cache)) {
    backdrop_page_save_cache($cache);
  }
  backdrop_cache_system_paths();
  module_implements_write_cache();
  system_run_automated_cron();
}