CI框架执行流程

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钩子对应方法:框架结束之前最后一步

发布了253 篇原创文章 · 获赞 47 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/104703049