ThinkPHP访问某方法的系统流程

本文参考了ThinkPHP3.1.2完全开发手册。


我们已访问网址http://serverName.com/index.php/User/read/id/8为例,分两种情况来解析系统的执行流程。


首先是调试模式下面的主要执行流程:

1、用户访问网站URL地址

2、调用项目的入口文件(这里是index.php)

3、载入系统入口文件ThinkPHP.php

4、判断系统常量,如果没有定义则自动生成

5、载入系统运行时文件runtime.php并定义项目路径常量

6、加载运行时所需的文件(通过调用load_runtime_file函数)

7、后面的流程和调试模式基本相同,只是模板编译过程省略了

8、读取核心基础文件列表和加载系统别名定义文件

9、检查项目相关目录是否存在,不存在则自动生成

10、调用Think::start执行入口

11、设置异常和错误处理机制

12、注册系统自动加载机制

13、预编译当前项目

14、加载框架惯例配置文件

15、读取当前的运行模式,如果不是标准模式则加载模式的配置文件(如果存在)

16、加载模式和项目配置文件

17、加载框架底层语言包文件

18、加载当前模式的系统行为定义文件

19、加载当前模式的项目行为(如果存在)

20、读取核心编译文件列表

21、载入项目公共函数文件

22、加载模式和项目别名定义文件

23、加载系统调试模式配置文件

24、加载项目调试模式配置文件

25、执行当前模式的App::run();运行项目

26、如果定义了动态载入则载入动态项目配置文件盒公共文件

27、URL调度,根据URL模式设置分析当前URL地址

28、URL路由检测

29、获取当前URL地址的分组、模块和操作名及其他参数并生成URL相关常量定义

30、如果检测到分组,则加载分组的配置文件和公共文件

31、检测模板主题并生成模板系统常量

32、设置SESSION_ID,开启Session

33、根据分组和模块名,定位到控制器类并且实例化

34、检查并执行当前操作的前置方法

35、检查当前模块的_initialize方法

36、执行当前操作方法

37、调用控制器的Display方法输出

38、定位当前操作方法的模块文件

39、调用模块引擎解析模板内容并生成模板编译缓存文件

40、读取模板缓存文件进行变量输出,替换解析返回的内容中需要替换的特殊字符串

41、生成表单令牌哈希

42、输出模板内容到浏览器

43、如果开启页面Trace显示则调用trace信息显示

44、检查并执行当前操作的后置方法

45、项目运行结束,记录内存中的日志信息到文件


如果在部署模式下(假设已经生成项目编译缓存),基本的系统流程是:

1、用户访问网站URL地址

2、调用项目的入口文件,如果替换了入口文件,则调用项目编译缓存文件,并跳过下面的3、4、5流程,直接执行后面的流程

3、载入系统入口文件ThinkPHP.php

4、判断系统常量,如果没有定义则自动生成

5、载入系统运行时文件runtime.php并定义项目路径常量

6、加载运行时所需的文件(通过调用load_runtime_file函数)

7、加载系统基础函数库文件common.php



系统执行流程根据不同的设置、行为和模式影响,可能存在差异,并不一定完整。但是开启页面Trace功能后,你就可以比较直观的看到当前的文件载入流程,能够帮助你了解系统的执行流程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值