2019独角兽企业重金招聘Python工程师标准>>>

switch ($current_phase) {case DRUPAL_BOOTSTRAP_CONFIGURATION:_drupal_bootstrap_configuration();break;
  1. 初始化配置

  #设置drupal的错误和异常处理机制set_error_handler('_drupal_error_handler');set_exception_handler('_drupal_exception_handler');#初始化php环境drupal_environment_initialize();#标记页面开始执行时间timer_start('page');#初始化配置包括settings.php文件里面的设置#小技巧:最好在settings.php文件里面设置$cookie_domain = '.example.com';#这样避免执行过多代码#设置session name源码#$prefix = ini_get('session.cookie_secure') ? 'SSESS' : 'SESS';#session_name($prefix . substr(hash('sha256', $session_name), 0, 32));drupal_settings_initialize();
case DRUPAL_BOOTSTRAP_PAGE_CACHE:_drupal_bootstrap_page_cache();break;

2.设置页面缓存并试图找到当前页面是否已经被缓存

require_once DRUPAL_ROOT . '/includes/cache.inc';#判断drupal缓存机制是否被更改,例如换成memcache或者redis或者其他#memcache模块设置有#$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';#$conf['cache_default_class'] = 'MemCacheDrupal';#设置form表单用的缓存在第三方缓存不存在时依旧可以使用,所以需要将form表单的缓存交给数据库#$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';#如果设置使用了第三方缓存必须要设置$conf['page_cache_without_database']这个为true才能使用第三方缓存#跳过使用mysql数据库,另外$conf['page_cache_invoke_hooks']设为false表示不再使用钩子hook_boot,#hook_exit否则会报错因为后面会用到module_list这个时候找不到这个方法。#$conf['page_cache_without_database'] = TRUE;#$conf['page_cache_invoke_hooks'] = FALSE;foreach (variable_get('cache_backends', array()) as $include) {require_once DRUPAL_ROOT . '/' . $include;}// Check for a cache mode force from settings.php.if (variable_get('page_cache_without_database')) {$cache_enabled = TRUE;}else {drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES, FALSE);$cache_enabled = variable_get('cache');}#判断用户ip是否已经被禁止drupal_block_denied(ip_address());#判断是否登录 如果是游客则读取页面缓存if (!isset($_COOKIE[session_name()]) && $cache_enabled) {
case DRUPAL_BOOTSTRAP_DATABASE:_drupal_bootstrap_database();break;

3.初始化数据库以及自动加载所需要的类

require_once DRUPAL_ROOT . '/includes/database/database.inc';
#注册自动加载类和接口的方法
#标注drupal的类和接口文件在数据库表registry里面,同时表registry_file对文件是否变化做了hash处理
#应该是在开始模块的时候存到数据表的
#当使用某个类或者某个接口的时候drupal会自动启动drupal_autoload_class或者drupal_autoload_interface
#去查找类或者接口去验证是否存在
spl_autoload_register('drupal_autoload_class');
spl_autoload_register('drupal_autoload_interface');
case DRUPAL_BOOTSTRAP_VARIABLES:_drupal_bootstrap_variables();break;

4.加载系统变量和所有开启的模块

global $conf;
#初始化锁系统
require_once DRUPAL_ROOT . '/' . variable_get('lock_inc', 'includes/lock.inc');
lock_initialize();
#加载数据库中的变量并不覆盖settings.php文件里变量的覆盖
$conf = variable_initialize(isset($conf) ? $conf : array());
#加载 bootstrap 模块. 在表system中bootstrap 等于 1的。
#目前自己装的项目只有dblog,overlay,devel 3个模块
require_once DRUPAL_ROOT . '/includes/module.inc';
module_load_all(TRUE);
case DRUPAL_BOOTSTRAP_SESSION:require_once DRUPAL_ROOT . '/' . variable_get('session_inc', 'includes/session.inc');drupal_session_initialize();break;

5.初始化session,开启session

#设置自己的session处理机制
session_set_save_handler('_drupal_session_open', '_drupal_session_close', '_drupal_session_read', '_drupal_session_write', '_drupal_session_destroy', '_drupal_session_garbage_collection');
$GLOBALS['lazy_session'] = TRUE;
$user = drupal_anonymous_user();
#游客用session_id(drupal_random_key());生成session_id 如果针对登录用户则用
#drupal_session_regenerate()生成session_id前者比后者效率高,但安全性略差。
#如果是https协议即使是游客也开启cookie
session_id(drupal_random_key());
if ($is_https && variable_get('https', FALSE)) {$insecure_session_name = substr(session_name(), 1);$session_id = drupal_random_key();$_COOKIE[$insecure_session_name] = $session_id;
}
case DRUPAL_BOOTSTRAP_PAGE_HEADER:_drupal_bootstrap_page_header();break;

6.引入钩子hook_boot 及输出头部

 case DRUPAL_BOOTSTRAP_LANGUAGE:drupal_language_initialize();break;

7.初始化多语言加载钩子bootstrap_invoke_all('language_init');

case DRUPAL_BOOTSTRAP_FULL:require_once DRUPAL_ROOT . '/includes/common.inc';_drupal_bootstrap_full();break;

8.完整初始化

引入路径(path)文件,引入模板(theme)文件,引入分页(pager)文件,引入菜单(menu)文件,引入分页(pager)文件等引入钩子module_invoke_all('init');

hook_init钩子主要用于模块引入自己的css文件

function system_init() {$path = drupal_get_path('module', 'system');// Add the CSS for this module. These aren't in system.info, because they// need to be in the CSS_SYSTEM group rather than the CSS_DEFAULT group.drupal_add_css($path . '/system.base.css', array('group' => CSS_SYSTEM, 'every_page' => TRUE));

转载于:https://my.oschina.net/u/1176727/blog/306902

drupal启动过程相关推荐

  1. Android系统的启动过程

    Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...

  2. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  3. Linux0.11内核引导启动过程概述

    Linux0.11仅支持x86架构.它的内核引导启动程序在文件夹boot内,共有三个汇编代码文件.按照启动流程依次是: (1)bootsect.s.boot是启动引导的意思,sect即sector,是 ...

  4. linux启动sql server数据库,SQL Server数据库启动过程详解及启动不起来的问题分析及解决方法...

    第五步.启动系统数据库model model系统数据库同样也是SQL Server启动过程中用到的一个非常关键的数据库,如果这个库损坏,SQL Server启动也会失败,关于model数据不能启动的原 ...

  5. Linux必知必会的目录与启动过程

    第1章 /etc/目录 1.1 /etc/sysconfig/network-scripts/ifcfg-eth0 linux第一块网卡的配置文件 [root@znix ~]# cat /etc/sy ...

  6. Spring Boot启动过程(二)

    书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractAppl ...

  7. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

  8. Spring 容器的启动过程

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6f.cn/b47K 一. 前言 ...

  9. golang源码分析-启动过程概述

    golang源码分析-启动过程概述 golang语言作为根据CSP模型实现的一种强类型的语言,本文主要就是通过简单的实例来分析一下golang语言的启动流程,为深入了解与学习做铺垫. golang代码 ...

最新文章

  1. 解决笔记本集成声卡在某些情况下视频、语音没有声音
  2. Edraw Max(亿图图示)案例:产品经理如何用亿图绘制流程图?
  3. [Week17] 个人阅读作业
  4. c一:指针引用(int * p )和指针(int * q)的区别
  5. 细数那些能让人惊喜的windows技巧
  6. UNIX创建临时文件
  7. (chap2 简单的Http协议) HTTP性能优化之管线化pipelining
  8. python 交互式流程图_使用Python创建漂亮的交互式和弦图
  9. GitHub上已超过2900星!这份有原理、有代码、有Demo的算法资源火了
  10. Unity屏幕坐标转UI坐标
  11. android 设备唯一码的获取,Cpu号,Mac地址
  12. C 入门 第五节 多维数组 字符串数组
  13. Python-编码格式
  14. Oracle备份的几种方式
  15. 一文带你玩转 DataStore
  16. 显存(Video Memory)
  17. Qt中关于emit和moc_*.cpp的自动生成
  18. 土豆网(第三方网站)使用qq登录的步骤和原理------oAuth协议
  19. 全民拼购系统介绍 全民拼购功能分析
  20. 【杂谈】 Listary自带的字典功能失效?没关系,让我们自己来改造它

热门文章

  1. 【Java单例模式】Java单例模式之懒汉模式线程安全
  2. maven -Dmaven.skip.test=true 和 -DskipTests=true的区别
  3. 按自己喜欢的方式过一生?
  4. cxf返回的报文,命名空间无前缀
  5. 各种环境下的渗透测试
  6. Android 系统架构
  7. 使用directX 7结合C#进行2D游戏编程
  8. 非阻塞模式(ioctlsocket)
  9. 多线程—线程池Executor框架及四种常用线程池
  10. C语言在计算机专业的功能,C语言程序设计在高职院校计算机专业教学中重要作用.pdf...