index.php:
1、处理项目路径,定义路径常量
包含 CodeIgniter.php 核心文件
CodeIgniter.php:
1、加载常量文件constants.php
2、加载公共方法文件Common.php
3、关闭自动在溢出字符加反斜线配置magic_quotes_runtime
4、检测配置是否开启register_globals全局变量注册(高版本php默认都是关闭的,防止变量覆盖引发安全问题),如果开启,则按照variables_order配置加载全局变量
5、注册_error_handler、_exception_handler、_shutdown_handler处理函数,三个函数都定义在Common.php文件中
-
_error_handler:调用Exception类的log_exception方法记录日志,如果配置开启display_errors则调用Exception类的show_php_error方法输出错误信息,并抛出500错误码
- _exception_handler:调用Exception类的log_exception方法记录日志;然后如果配置开启display_errors则调用Exception类的show_exception方法输出异常信息
- _shutdown_handler:首先调用error_get_last获得最后一条错误详情,如果有错误,则调用_error_handler处理
6、如果配置了subclass_prefix类前缀,则替换默认的类前缀(这里用Common.php中的get_config助手方法)
7、加载composer的autoload类
8、加载基准测试类Benchmark,用于加开始和结束点分析程序运行阶段性能,加载的同时标记整个调用start和加载框架基础start
9、加载钩子类(所谓钩子,就是预先设置好框架执行到某一步需要执行的方法,当框架执行到那里,自动执行相应的方法,可以在config/Hooks.php配置文件中配置每一步的钩子方法,也可以自定义钩子,添加到CodeIgniter.php中要执行的地方即可),执行pre_system钩子定义的方法
10、加载配置类Config.php
11、加载CI封装好的mbstring、hash、password、standard、相关方法。
12、加载语言类Utf8
13、加载URI处理类,处理$_SERVER中的uri相关
14、加载路由类Router,根据$_SERVER变量中的请求路由等转换成对应的类和方法
15、加载输出类Output,主要处理cache相关
16、加载Security安全类,主要定义过滤csrf、xss相关的方法
17、获取请求参数、并调用Security类中的方法进行过滤
18、加载Lang语言类
19、包含core/Controller.php底层控制器文件
20、定义CI_Controller单例方法
21、Benchmark标记加载框架基础end
22、检查路由对应的类和方法是否存在,否则抛出404
23、执行pre_controller钩子对应方法:加载自定义控制器之前
24、Benchmark标记controller执行开始
25、实例化路由对应的controller类
26、执行post_controller_constructor钩子对应方法:实例化自定义控制器后
27、通过call_user_func_array调用路由对应的控制器方法
28、Benchmark标记执行controller结束
29、执行post_controller钩子对应方法:controller接收后
30、如果没有定义自定义display_override钩子用于输出结果,则调用Output对应的默认_display方法输出
31、执行post_system钩子对应方法:框架结束之前最后一步