ThinkPHP3.0完全开发手册                                           

 

1.11               系统流程

我们以访问网址 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

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

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

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

3

载入系统入口文件ThinkPHP.php

4

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

5

载入项目编译缓存文件~runtime.php

6

调用Think::start执行入口

 

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

系统执行流程根据不同的设置、行为和模式影响,可能存在差异,并不一定完整。但是开启页面Trace功能后,你就可以比较直观的看到当前的文件载入流程,能够帮助你了解系统的执行流程,例如新版的blog示例在关闭调试模式下面一共加载了20个文件,列表如下:

[0] => E:\www\App\Examples\Blog\index.php
[1] => E:\www\App\ThinkPHP\ThinkPHP.php
[2] => E:\www\App\Examples\Blog\Runtime\~runtime.php
[3] => E:\www\App\Examples\Blog\Lib\Behavior\CheckLangBehavior.class.php
[4] => E:\www\App\Examples\Blog\Lib\Action\BlogAction.class.php
[5] => E:\www\App\Examples\Blog\Lib\Action\PublicAction.class.php
[6] => E:\www\App\ThinkPHP\Lib\Core\Model.class.php
[7] => E:\www\App\ThinkPHP\Lib\Core\Db.class.php
[8] => E:\www\App\ThinkPHP\Lib\Driver\Db\DbMysql.class.php
[9] => E:\www\App\Examples\Blog\Runtime\Data\_fields\examples.Category.php
[10] => E:\www\App\Examples\Blog\Lib\Model\AdvModel.class.php
[11] => E:\www\App\Examples\Blog\Runtime\Data\_fields\examples.Blog.php
[12] => E:\www\App\Examples\Blog\Runtime\Data\_fields\examples.Comment.php
[13] => E:\www\App\Examples\Blog\Runtime\Data\_fields\examples.Tag.php
[14] => E:\www\App\Examples\Blog\Lib\Model\BlogViewModel.class.php
[15] => E:\www\App\Examples\Blog\Lib\Model\ViewModel.class.php
[16] => E:\www\App\Examples\Blog\Lib\Model\BlogModel.class.php
[17] => E:\www\App\Examples\Blog\Lib\Model\CategoryModel.class.php
[18] => E:\www\App\Examples\Blog\Lib\ORG\Page.class.php
[19] => E:\www\App\Examples\Blog\Runtime\Cache\2ab73b774a28fab5232b8c752b654018.php


NetPc