CodeIgniter框架源码学习之框架初始化文件--CodeIgniter.php

框架初始化文件位置:./system/core/CodeIgniter.php
1、定义CI版本(当前版本为3.1.4)
2、在有APPPATH.'config/'.ENVIRONMENT.'/constants.php'时则加载,没有时加载APPPATH.'config/constants.php' 常量类
3、加载全局函数类BASEPATH.'core/common.php'
4、安全程序,判断是不是php5.4,如果不是则进行一些php.ini设置(了解不多)
5、定义一个错误处理函数来记录php错误
6、 设置类前缀(在index.php中可以通过$assign_to_config[]来自定义配置项)
一般的类前缀会在config文件中被设置,这个类前缀可以让CI知道application下的libraries文件夹下哪些的类继承了CI核心类的类,因为CI容许入口文件index.php中覆盖配置文件的配置项,所以程序开始执行之前我们需要知道类前缀是否被覆盖,如果被覆盖了,我们将在所有类加载之前设置它的值。
7、是否加载composer autoloader
8、.脚本开始执行加载并实例化基准测试类(类文件:core/Benchmark.php)
记下total_execution_time_start 、loading_time:_base_classes_start这两个时间点
9、如果可以加载并实例化钩子类 (类文件core/Hooks.php)我们就加载并实例化
这需要在钩子是在 application/config/config.php 中开启并在 application/config/hooks.php文件中定义当前的钩子
详情: http://codeigniter.org.cn/user_guide/general/hooks.html
10、加载并实例化配置类,如果我们在index.php中手动的通过$assign_to_config[]来进行配置过某些属性则使用index.php中的设置
11、加载并实例化UTF-8类,这里的顺序是非常重要的UTF-8类必须跟在配置类的后面加载
12、加载一些共有的特征类BASEPATH.'core/compat/文件下的 mbstring.php,hash.php,password.php,standard.php
13、加载并实例化URI类
14、加载并实例化router类,设置router
15、加载并实例化输出类
16、判断有没有缓存文件如果有输出
17、为了防止xss和csrf攻击加载并实例化security类
18、加载并实例化输入类
19、加载并实例化语言包
20、加载并实例化基类控制器类 get_instance() 这个函数用于实例化控制器类如果自定义前缀的控制器存在,则加载
21、记录loading_time:_base_classes_end时间点
22、加载子类控制器 此处说明:所有的功能不管是应用程序控制器还是加载类可以通过URI调用,控制器function不能用下划线开始先通过控制器获得加载的类和方法当加载的类或者方法又或者方法不在CI_Controller这个类中的时候,显示404页面
调用请求的方法首先监测请求的类中是否有_remap方法,如果有调用,如果没有再判断请求的类中是否有请求的方法如果没有显示404页面
最后调用请求的方法
23、如果设置了pre_controller这个钩子则调用
24、如果设置了pre_controller这个钩子则调用
25、如果设置了post_controller_constructor这个钩子则调用
26、记录控制器执行结束的时间
27、如果设置了post_controller这个钩子则调用
28、将最终的输出发送到浏览器
29、如果设置了post_system钩子则调用


你可能感兴趣的:(CI源码)