You are here

8 页面头部阶段

admin 的头像
Submitted by admin on 星期五, 2015-07-24 09:53

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

 我们来看阶段5,也就是页面头部阶段,对应的代码:

        case DRUPAL_BOOTSTRAP_PAGE_HEADER:

          _drupal_bootstrap_page_header();

          break;

在这里,Drupal将这个阶段的工作委托给了_drupal_bootstrap_page_header函数。我们通过文本查找,很快就找到了这个函数的定义:

/**

 * Invokes hook_boot(), initializes locking system, and sends HTTP headers.

 */

function _drupal_bootstrap_page_header() {

  bootstrap_invoke_all('boot');

 

  if (!drupal_is_cli()) {

    ob_start();

    drupal_page_header();

  }

}

在这个函数里,首先是触发hook_boot;接着使用drupal_is_cli判断一下,当前脚本是否是运行在命令行环境下。我们这里当然不是。如果不是的话,使用ob_start来打开输出缓冲区,这是服务器端和浏览器端交互时,常见的PHP用法,接着使用drupal_page_header输出页面头部信息。什么是页面头部信息,我们来看一下这个帮助函数:

function drupal_page_header() {

  $headers_sent = &drupal_static(__FUNCTION__, FALSE);

  if ($headers_sent) {

    return TRUE;

  }

  $headers_sent = TRUE;

 

  $default_headers = array(

    'Expires' => 'Sun, 19 Nov 1978 05:00:00 GMT',

    'Last-Modified' => gmdate(DATE_RFC1123, REQUEST_TIME),

    'Cache-Control' => 'no-cache, must-revalidate, post-check=0, pre-check=0',

    'ETag' => '"' . REQUEST_TIME . '"',

  );

  drupal_send_headers($default_headers);

}

    这里面的'Expires''Last-Modified''Cache-Control''ETag'就是页面头部信息,对于登陆用户,Drupal总是将缓存设置为no-cache,这样保证登陆用户每次请求总能看到最新的页面。


Drupal版本: