5.1 引导指令

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

 我们在前面提到,Drupal会启动一个完整的引导指令,实际上,对于每个由Drupal处理的页面请求,Drupal都会启用自己的引导指令。Drupal的引导指令,定义在bootstrap.inc文件中,它包含八个阶段:

 

 

初始化配置阶段

在这一阶段,通过include_once()来解析settings.php文件,提取该文件中保存的键值信息,将会初始化Drupal的内部配置数组,并建立站点的基路径($base_url),获取HTTP请求的内部路径,初始化一些全局变量。

 

页面缓存阶段

在有些情况下,我们需要更高性能的站点,因此就需要不经过数据库就调用缓存系统。在页面缓存阶段,系统会加载自带的缓存处理器,并尝试加载第3方模块(比如memcached)的缓存处理器,如果启用了页面缓存,那么系统将会在本阶段直接返回缓存的页面,并终止引导指令后续阶段的执行。

 

初始化数据库阶段

在初始化数据库阶段,将会初始化数据库系统。需要注意的是,数据库连接只有在实际调用时,才会正式初始化;同时会注册自动加载的函数,这样我们就可以方便的访问系统中定义的类和接口了。

 

初始化变量系统阶段

 

在这个阶段,将会初始化Drupal的锁系统;加载所有的系统变量,注意这里没有覆写settings.php中的变量;加载引导指令模块。

 

初始化会话处理阶段

Drupal采用了PHP内置的会话处理机制,并在在此基础上,实现了自己用户层级的会话存储处理器,使用session_set_save_handler函数重载了SESSION存储方式,这样就可以使用数据库来存储会话信息了。这里我们需要注意的是,Drupal的会话信息不是存储在内存中的,而是存储在数据库中的。在本阶段,将会初始化或者重新构建会话。代表当前用户的全局对象$User也会在这一阶段初始化,不过出于效率的考虑,并不是对象的所有属性都是可用的(当需要时,可以通过明确的调用函数user_load()来加载这些属性)。

 

设立页面头部阶段

在这个阶段,会使用bootstrap_invoke_all触发hook_boot钩子,系统会使用这个钩子来设置一些全局参数,以供后面调用;同时还会初始化锁系统;发送默认的HTTP头部。需要注意的是,在调用hook_boot钩子时,大多数的模块和许多通用函数库还没有加载进来,它是处理页面请求所调用的第一个钩子,比hook_init还要早。如果你所用的模块实现了这个钩子,那么会在“性能”管理页面,提示你这个模块与激进缓存模式不兼容。

 

语言判定阶段

    在这个阶段,会初始化所有已定义的语言类型。如果站点启用了多语言特性,系统会基于语言协定设置,为每个给定类型选择一个语言;同时在多语言环境下,完成了语言系统初始化后,还会调用hook_language_init钩子。

 

完成

该阶段是引导指令的最后一个阶段,它包括加载一些通用函数库,比如path.inctheme.incpager.incmenu.incfile.incform.incajax.inctoken.inc等等。在这里将设置Drupal定制的错误处理器,并加载所有启用了的模块。同时还会初始化Drupal内部路径,初始化主题系统。最后Drupal调用hook_init钩子,这样在对请求正式处理以前,为相应模块提供一个交互的机会。

 


Drupal版本: