CI框架代码运行最详细的流程(不违法广告法吧~)

最近在学习CI(3.1.0-dev)框架源码,一边看源码,一边在github上面写中文注释,https://github.com/pandancode/CI-note,有兴趣的同学可以看看。

index.php流程:

1、定义开发模式,调试,开发,发布

2、设置system,application等目录

3、设置默认控制器(不建议在index.php设置)

4、设置用户配置

5、检查路径

6、定义路径常量

7、加载引导程序  system/core/codeigniter.php

condeigniter.php流程:

1、定义框架版本

2、加载框架定义的常数 system/config/contants.php

3、加载全部函数 system/core/Common.php

4、检查PHP版本小于5.4,做兼容性处理

5、将PHP超级变量存放在$GLOBALS数组中

6、设置错误,异常,脚本退出触发的函数

7、设置子类前缀

8、如有需要自动加载组件,则加载APPPATH/vendor/autoload.php,或者配置文件里设置的文件路径

9、加载benchmark,并记录total_execution_time_start,_base_classes_start两个时间点

10、加载Hooks,并调用pre_system钩子

11、加载config类,并初始化实例,根据首页设置配置,替换配置文件其中项

12、设置默认字符,并加载msstring、iconv扩展

13、检查mbstring,hash,password,standard类函数是否存在(可能由于版本问题,有些函数在低版本中没定义),则重新定义实现该函数

14、实例化utf8、uri、router、output类

15、缓存检查,如果没有重写cache输出,且满足缓存条件,则直接输出缓存,退出脚本

16、初始化Security、Input、Lang类

17、加载BASEPATH/core/Controller.php控制器(迟点铺开讲)

18、如果存在子控制器,则加载进来

19、设置_base_classes_end时间点

20、检查路由接触出来的class和method是否有效,如果无效,则激活404状态变量

21、检查是否重置404,如果重置404,则检查重置404类和方法是否有效,如果无效,则取消404,

22、如果404为false,第一种情况是本身404一直是未激活,则使用路由解析出来的类和方法,第二种重置了404,但是类或者方法无效,则使用默认的类和方法,否者使用新的类和方法处理404

23、如果方法不是_remap,则获取参数,Hooks调用pre_controller钩子

24、记录controller_execution_time_class_method开始时间,并初始化class

25、Hooks调用post_controller_constructor 钩子

26、调用class中method,这里会调用相应的controller和方法,方法里面在调用model来处理业务逻辑(迟点铺开讲)

27、BM记录controller_execution_time_class_method执行结束时间点

28、Hooks调用post_controller钩子

29、输出视图

30、Hooks调用post_system钩子

妈蛋,流程终于结束了。

时间: 2024-08-07 08:37:56

CI框架代码运行最详细的流程(不违法广告法吧~)的相关文章

内存的划分 & 程序代码运行时内存工作流程

内存的划分: 1,寄存器. 2,本地方法区. 3,方法区. 4,栈内存. 存储的都是局部变量. 而且变量所属的作用域一旦结束,该变量就自动释放. 5,堆内存. 存储是数组和对象(其实数组就是对象) ,凡是new建立的都在堆中. 特点: 1)每一个实体都有首地址值. 2)堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.整数是0,小数0.0或者0.0f,boolean类型是false,char类型是 '\u0000',引用数据类型是NULL 3)垃圾回收机制. 全局变量和局部变量的区别:

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav

PHP的CI框架流程基本熟悉

CI框架是PHP的一个快速开发框架,我是目前的公司项目后台语言用的PHP,因为我做前端开发,需要用php去填充页面数据,所以就开始去了解这个框架,学习了一些php和数据库的东西,这篇文章先具体介绍CI框架吧我用的是CI2.0框架. 1.去codeIgniter的网站下载压缩包,网址:http://codeigniter.org.cn/download. 注意:下载2.0或者3.0可能有使用不同的方式.所以你需要看相对应的手册去了解.手册网址:http://codeigniter.org.cn/d

php CI框架目录结构及运行机制

CI目录结构 CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件. 应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主要是存放组成CI的核心文件的,index.php入口文件是一个单一入口文件,所谓单一文 件是指在一个网站(应用程序)中,所有的请求都是指向的这么一个文件,由它负责接收并处理URL中的控制器和方法.换句话说, 它调用一个 '控制器', 然后返回一个'视图'. application : cache        

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

CI框架源码阅读笔记5 基准测试 BenchMark.php

上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa