You are here

16.5 drupal_page_footer负责收尾工作

admin 的头像
Submitted by admin on 星期一, 2015-08-03 10:05

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

Drupal执行完HTTP请求后,调用drupal_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().

 */

function drupal_page_footer() {

  global $user;

 

  module_invoke_all('exit');

 

  // Commit the user session, if needed.

  drupal_session_commit();

 

  if (variable_get('cache', 0) && ($cache = drupal_page_set_cache())) {

    drupal_serve_page_from_cache($cache);

  }

  else {

    ob_flush();

  }

 

  _registry_check_code(REGISTRY_WRITE_LOOKUP_CACHE);

  drupal_cache_system_paths();

  module_implements_write_cache();

  system_run_automated_cron();

}

这里提供了一个hook_exit钩子函数,允许第三方模块在HTTP请求结束时,与Drupal进行交互。然后就是会话提交,页面缓存设置。这里的ob_flush,用来刷新输出缓冲区,可以看作引导指令页面头部阶段ob_start()的一个回应。

再往下面就是注册表检查、缓存、自动运行定时任务。我们看到,定时任务的运行,是在HTTP请求结束后,运行的,这样就不会影响返回当前页面的性能。

通过阅读Drupal核心的代码,我们弄明白了,Drupal一个普通节点页面的生成过程。如果你还有不明白的地方,可以多看几遍,把每个函数都认真的读一遍,遇到不懂的函数,查一下文档。


Drupal版本: