ThinkPHP教程--20--系统流程
我们来系统的了解下ThinkPHP框架开发的应用的标准执行流程:
用户URL请求
调用应用入口文件(通常是网站的index.php)
载入框架入口文件(ThinkPHP.php)
记录初始运行时间和内存开销
系统常量判断及定义
载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化
设置错误处理机制和自动加载机制
调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)
部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤22)
读取应用模式(由APP_MODE常量定义)的定义文件(以下以普通模式为例说明)
加载当前应用模式定义的核心文件(普通模式是 ThinkPHP/Mode/common.php)
加载惯例配置文件(普通模式是 ThinkPHP/Conf/convention.php)
加载应用配置文件(普通模式是 Application/Common/Conf/config.php)
加载系统别名定义
判断并读取应用别名定义文件(普通模式是 Application/Common/Conf/alias.php)
加载系统行为定义
判断并读取应用行为定义文件(普通模式是 Application/Common/Conf/tags.php)
加载框架底层语言包(普通模式是 ThinkPHP/Lang/zh-cn.php)
如果是部署模式则生成应用编译缓存文件
加载调试模式系统配置文件(ThinkPHP/Conf/debug.php)
判断并读取应用的调试配置文件(默认是 Application/Common/Conf/debug.php)
判断应用状态并读取状态配置文件(如果APP_STATUS常量定义不为空的话)
检测应用目录结构并自动生成(如果CHECK_APP_DIR配置开启并且RUNTIME_PATH目录不存在的情况下)
调用Think\App类的run方法启动应用
应用初始化(app_init)标签位侦听并执行绑定行为
判断并加载动态配置和函数文件
调用Think\Dispatcher::dispatch方法进行URL请求调度
自动识别兼容URL模式和命令行模式下面的$_SERVER['PATH_INFO']参数
检测域名部署以及完成模块和控制器的绑定操作(APP_SUB_DOMAIN_DEPLOY参数开启)
分析URL地址中的PATH_INFO信息
获取请求的模块信息
检测模块是否存在和允许访问
判断并加载模块配置文件、别名定义、行为定义及函数文件
判断并加载模块的动态配置和函数文件
模块的URL模式判断
模块的路由检测(URL_ROUTER_ON开启)
PATH_INFO处理(path_info)标签位侦听并执行绑定行为
URL后缀检测(URL_DENY_SUFFIX以及URL_HTML_SUFFIX处理)
获取当前控制器和操作,以及URL其他参数
URL请求调度完成(url_dispatch)标签位侦听并执行绑定行为
应用开始(app_begin)标签位侦听并执行绑定行为
调用SESSION_OPTIONS配置参数进行Session初始化(如果不是命令行模式)
根据请求执行控制器方法
如果控制器不存在则检测空控制器是否存在
控制器开始(action_begin)标签位侦听并执行绑定行为
默认调用系统的ReadHtmlCache行为读取静态缓存(HTML_CACHE_ON参数开启)
判断并调用控制器的_initialize初始化方法
判断操作方法是否存在,如果不存在则检测是否定义空操作方法
判断前置操作方法是否定义,有的话执行
Action参数绑定检测,自动匹配操作方法的参数
如果有模版渲染(调用控制器display方法)
视图开始(view_begin)标签位侦听并执行绑定行为
调用Think\View的fetch方法解析并获取模版内容
自动识别当前主题以及定位模版文件
视图解析(view_parse)标签位侦听并执行绑定行为
默认调用内置ParseTemplate行为解析模版(普通模式下面)
模版引擎解析模版内容后生成模版缓存
模版过滤替换(template_filter)标签位侦听并执行绑定行为
默认调用系统的ContentReplace行为进行模版替换
输出内容过滤(view_filter)标签位侦听并执行绑定行为
默认调用系统的WriteHtmlCache行为写入静态缓存(HTML_CACHE_ON参数开启)
调用Think\View类的render方法输出渲染内容
视图结束(view_end)标签位侦听并执行绑定行为
判断后置操作方法是否定义,有的话执行
控制器结束(action_end)标签位侦听并执行绑定行为
应用结束(app_end)标签位侦听并执行绑定行为
执行系统的ShowPageTrace行为(SHOW_PAGE_TRACE参数开启并且不是AJAX请求)
日志信息存储写入
如果你绑定了更多的应用行为的话,流程可能会更加复杂。
如果是部署模式下面的第二次请求的话,上面的流程中的步骤10~21是可以省略的。
ThinkPHP教程--20--系统流程相关推荐
- 迷你MVVM框架 avalonjs 学习教程20、路由系统
迷你MVVM框架 avalonjs 学习教程20.路由系统 时间 2014-10-28 14:44:00 Ruby's Louvre 原文 http://www.cnblogs.com/rubyl ...
- Destoon教程之系统标签调用大全 【持续更新】
Destoon教程之系统标签调用大全 [持续更新]整理前先列大纲: 一.全局通用标签调用 字段语法({$DT[字段名]}) 网站名称:{$DT[sitename]} 网站地址:{DT_PATH} ...
- php面试框架的执行流程图,ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程
ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问http:///My/index.php/Index/show/所执行的流程进行详细的分析 ...
- STM32 进阶教程 20 - 串口+DMA实现OneWire总线
前言 One-wire总线使用一根并联总线完成对于多个设备的访问,通过上拉的OD门实现多设备的读写操作,通过ID区别设备,通过CRC5完成数据校验.常见对于one-wire总线的操作代码主要使用包含基 ...
- STM32 基础系列教程 20 - RTC
前言 学习stm32 RTC(实时时钟)的使用,学会用RTC实现钟表功能. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm3 ...
- OD使用教程20 - 调试篇20
OD使用教程20 - 调试篇20 让编程改变世界 Change the world by program 名词注释:Keygen为Key Generator的缩写,就是我们一般所说的注册机.是软件 ...
- Magento教程 20:仅限会员留言的产品评论设定!
欢迎使用Magento购物车系统 ,之前和大家说明过为了防止垃圾留言, Magento的产品评论需要管理者审核才可发布. 当有人留言时不会立即显现于前台,而是出现在后台供管理员审核后才会送出. 今天则 ...
- 【40-系统性能压力测试基本概念-相关性能指标HPSTPSQPSRT-安装Jmeter教程-JMeter测试流程-线程组-取样器-监视器-测试商城首页-JMeter Address 占用的问题】
一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...
- Mari教程20部合集
Mari教程20部合集 教程说明:英文视频教程,部分有工程文件 部分教程目录: MARI 3 入门教程 MARI 角色纹理绘制教程 MARI 纹理贴图教程 MARi 纹理转换技术视频教程 MARI彩绘 ...
- linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6
目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...
最新文章
- RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息
- linux / 命令行 / LD_DEBUG 命令
- 全国计算机一级d类考试内容,全国计算机一级考试WPS office复习题及答案2017
- java dao 单元测试_Spring Service、Dao进行Junit单元测试
- STAR-GCN:用于推荐系统的图卷积神经网络 IJCAI 2019
- maven aliyun 仓库速度就是快
- 【spark】spark学习-27-Spark性能调优(2)
- 移动测试之-流量测试方案
- C语言-目标文件/链接文件
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
- java 动态代理 jdk为何比cglib效率低 原理总结
- 俄羅斯大神 Ratiborus 的推特
- Buck电路的闭环PI控制
- python操作模拟器多开操作_窗口多开模拟器同步操作器▲按键精灵脚本▲
- lwj_C#_周总结1
- 百度街景自动爬取,并自动检测没有影像的位置
- C++ std::numeric_limits<T>::max(),min()及lowest()
- 抖音上的战斗力测试软件,战斗力测试app
- 解决PRprocs5安装问题的方法
- opencv read grab retrieve 关系