我们来系统的了解下ThinkPHP框架开发的应用的标准执行流程:

  1. 用户URL请求
  2. 调用应用入口文件(通常是网站的index.php)
  3. 载入框架入口文件(ThinkPHP.php)
  4. 记录初始运行时间和内存开销
  5. 系统常量判断及定义
  6. 载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化
  7. 设置错误处理机制和自动加载机制
  8. 调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)
  9. 部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤22)
  10. 读取应用模式(由APP_MODE常量定义)的定义文件(以下以普通模式为例说明)
  11. 加载当前应用模式定义的核心文件(普通模式是 ThinkPHP/Mode/common.php)
  12. 加载惯例配置文件(普通模式是 ThinkPHP/Conf/convention.php)
  13. 加载应用配置文件(普通模式是 Application/Common/Conf/config.php)
  14. 加载系统别名定义
  15. 判断并读取应用别名定义文件(普通模式是 Application/Common/Conf/alias.php)
  16. 加载系统行为定义
  17. 判断并读取应用行为定义文件(普通模式是 Application/Common/Conf/tags.php)
  18. 加载框架底层语言包(普通模式是 ThinkPHP/Lang/zh-cn.php)
  19. 如果是部署模式则生成应用编译缓存文件
  20. 加载调试模式系统配置文件(ThinkPHP/Conf/debug.php)
  21. 判断并读取应用的调试配置文件(默认是 Application/Common/Conf/debug.php)
  22. 判断应用状态并读取状态配置文件(如果APP_STATUS常量定义不为空的话)
  23. 检测应用目录结构并自动生成(如果CHECK_APP_DIR配置开启并且RUNTIME_PATH目录不存在的情况下)
  24. 调用Think\App类的run方法启动应用
  25. 应用初始化(app_init)标签位侦听并执行绑定行为
  26. 判断并加载动态配置和函数文件
  27. 调用Think\Dispatcher::dispatch方法进行URL请求调度
  28. 自动识别兼容URL模式和命令行模式下面的$_SERVER['PATH_INFO']参数
  29. 检测域名部署以及完成模块和控制器的绑定操作(APP_SUB_DOMAIN_DEPLOY参数开启)
  30. 分析URL地址中的PATH_INFO信息
  31. 获取请求的模块信息
  32. 检测模块是否存在和允许访问
  33. 判断并加载模块配置文件、别名定义、行为定义及函数文件
  34. 判断并加载模块的动态配置和函数文件
  35. 模块的URL模式判断
  36. 模块的路由检测(URL_ROUTER_ON开启)
  37. PATH_INFO处理(path_info)标签位侦听并执行绑定行为
  38. URL后缀检测(URL_DENY_SUFFIX以及URL_HTML_SUFFIX处理)
  39. 获取当前控制器和操作,以及URL其他参数
  40. URL请求调度完成(url_dispatch)标签位侦听并执行绑定行为
  41. 应用开始(app_begin)标签位侦听并执行绑定行为
  42. 调用SESSION_OPTIONS配置参数进行Session初始化(如果不是命令行模式)
  43. 根据请求执行控制器方法
  44. 如果控制器不存在则检测空控制器是否存在
  45. 控制器开始(action_begin)标签位侦听并执行绑定行为
  46. 默认调用系统的ReadHtmlCache行为读取静态缓存(HTML_CACHE_ON参数开启)
  47. 判断并调用控制器的_initialize初始化方法
  48. 判断操作方法是否存在,如果不存在则检测是否定义空操作方法
  49. 判断前置操作方法是否定义,有的话执行
  50. Action参数绑定检测,自动匹配操作方法的参数
  51. 如果有模版渲染(调用控制器display方法)
  52. 视图开始(view_begin)标签位侦听并执行绑定行为
  53. 调用Think\View的fetch方法解析并获取模版内容
  54. 自动识别当前主题以及定位模版文件
  55. 视图解析(view_parse)标签位侦听并执行绑定行为
  56. 默认调用内置ParseTemplate行为解析模版(普通模式下面)
  57. 模版引擎解析模版内容后生成模版缓存
  58. 模版过滤替换(template_filter)标签位侦听并执行绑定行为
  59. 默认调用系统的ContentReplace行为进行模版替换
  60. 输出内容过滤(view_filter)标签位侦听并执行绑定行为
  61. 默认调用系统的WriteHtmlCache行为写入静态缓存(HTML_CACHE_ON参数开启)
  62. 调用Think\View类的render方法输出渲染内容
  63. 视图结束(view_end)标签位侦听并执行绑定行为
  64. 判断后置操作方法是否定义,有的话执行
  65. 控制器结束(action_end)标签位侦听并执行绑定行为
  66. 应用结束(app_end)标签位侦听并执行绑定行为
  67. 执行系统的ShowPageTrace行为(SHOW_PAGE_TRACE参数开启并且不是AJAX请求)
  68. 日志信息存储写入

如果你绑定了更多的应用行为的话,流程可能会更加复杂。

如果是部署模式下面的第二次请求的话,上面的流程中的步骤10~21是可以省略的。

ThinkPHP教程--20--系统流程相关推荐

  1. 迷你MVVM框架 avalonjs 学习教程20、路由系统

    迷你MVVM框架 avalonjs 学习教程20.路由系统 时间 2014-10-28 14:44:00  Ruby's Louvre 原文  http://www.cnblogs.com/rubyl ...

  2. Destoon教程之系统标签调用大全 【持续更新】

    Destoon教程之系统标签调用大全 [持续更新]整理前先列大纲: 一.全局通用标签调用   字段语法({$DT[字段名]}) 网站名称:{$DT[sitename]} 网站地址:{DT_PATH} ...

  3. php面试框架的执行流程图,ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问http:///My/index.php/Index/show/所执行的流程进行详细的分析 ...

  4. STM32 进阶教程 20 - 串口+DMA实现OneWire总线

    前言 One-wire总线使用一根并联总线完成对于多个设备的访问,通过上拉的OD门实现多设备的读写操作,通过ID区别设备,通过CRC5完成数据校验.常见对于one-wire总线的操作代码主要使用包含基 ...

  5. STM32 基础系列教程 20 - RTC

    前言 学习stm32 RTC(实时时钟)的使用,学会用RTC实现钟表功能. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm3 ...

  6. OD使用教程20 - 调试篇20

    OD使用教程20 - 调试篇20 让编程改变世界 Change the world by program   名词注释:Keygen为Key Generator的缩写,就是我们一般所说的注册机.是软件 ...

  7. Magento教程 20:仅限会员留言的产品评论设定!

    欢迎使用Magento购物车系统 ,之前和大家说明过为了防止垃圾留言, Magento的产品评论需要管理者审核才可发布. 当有人留言时不会立即显现于前台,而是出现在后台供管理员审核后才会送出. 今天则 ...

  8. 【40-系统性能压力测试基本概念-相关性能指标HPSTPSQPSRT-安装Jmeter教程-JMeter测试流程-线程组-取样器-监视器-测试商城首页-JMeter Address 占用的问题】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  9. Mari教程20部合集

    Mari教程20部合集 教程说明:英文视频教程,部分有工程文件 部分教程目录: MARI 3 入门教程 MARI 角色纹理绘制教程 MARI 纹理贴图教程 MARi 纹理转换技术视频教程 MARI彩绘 ...

  10. linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6

    目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...

最新文章

  1. RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息
  2. linux / 命令行 / LD_DEBUG 命令
  3. 全国计算机一级d类考试内容,全国计算机一级考试WPS office复习题及答案2017
  4. java dao 单元测试_Spring Service、Dao进行Junit单元测试
  5. STAR-GCN:用于推荐系统的图卷积神经网络 IJCAI 2019
  6. maven aliyun 仓库速度就是快
  7. 【spark】spark学习-27-Spark性能调优(2)
  8. 移动测试之-流量测试方案
  9. C语言-目标文件/链接文件
  10. 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
  11. java 动态代理 jdk为何比cglib效率低 原理总结
  12. 俄羅斯大神 Ratiborus 的推特
  13. Buck电路的闭环PI控制
  14. python操作模拟器多开操作_窗口多开模拟器同步操作器▲按键精灵脚本▲
  15. lwj_C#_周总结1
  16. 百度街景自动爬取,并自动检测没有影像的位置
  17. C++ std::numeric_limits<T>::max(),min()及lowest()
  18. 抖音上的战斗力测试软件,战斗力测试app
  19. 解决PRprocs5安装问题的方法
  20. opencv read grab retrieve 关系

热门文章

  1. 中国象棋AI在线弈游戏源码
  2. 文件夹病毒或1K病毒解决
  3. python中tree 100 6_Python neighbors.BallTree方法代碼示例
  4. 【小峰の题单】网络流经典题目
  5. 学习-工具-tox自动化工具
  6. 恋爱策略:“没女”也能胜美女
  7. Windows锁机病毒
  8. java版微信三级分销完整源码
  9. Linux远程终端工具之Xmanager----Xbrowser篇
  10. 【esn】 学习回声状态网络