ThinkPHP3.2 加载过程(一),thinkphp3.2加载
加载过程(官方介绍) :
<span class="pun">用户<span class="pln">URL<span class="pun">请求</span></span></span>
<span class="pun">调用应用入口文件(通常是网站的<span class="pln">index<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span>
<span class="pun">载入框架入口文件(<span class="typ">ThinkPHP<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span>
<span class="pun">记录初始运行时间和内存开销</span>
<span class="pun">系统常量判断及定义</span>
<span class="pun">载入框架引导类(<span class="typ">Think<span class="pln">\Think<span class="pun">)并执行<span class="typ">Think<span class="pun">::<span class="pln">start<span class="pun">方法进行应用初始化</span></span></span></span></span></span></span></span>
<span class="pun">设置错误处理机制和自动加载机制</span>
<span class="pun">调用<span class="typ">Think<span class="pln">\Storage<span class="pun">类进行存储初始化(由<span class="pln">STORAGE_TYPE<span class="pun">常量定义存储类型)</span></span></span></span></span></span>
<span class="pun">部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤<span class="lit">22<span class="pun">)</span></span></span>
<span class="pun">读取应用模式(由<span class="pln">APP_MODE<span class="pun">常量定义)的定义文件(以下以普通模式为例说明)</span></span></span>
<span class="pun">加载当前应用模式定义的核心文件(普通模式是<span class="pln"> <span class="typ">ThinkPHP<span class="pun">/<span class="typ">Mode<span class="pun">/<span class="pln">common<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span>
<span class="pun">加载惯例配置文件(普通模式是<span class="pln"> <span class="typ">ThinkPHP<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="pln">convention<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span>
<span class="pun">加载应用配置文件(普通模式是<span class="pln"> <span class="typ">Application<span class="pun">/<span class="typ">Common<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="pln">config<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span>
<span class="pun">加载系统别名定义</span>
<span class="pun">判断并读取应用别名定义文件(普通模式是<span class="pln"> <span class="typ">Application<span class="pun">/<span class="typ">Common<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="kwd">alias<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span>
<span class="pun">加载系统行为定义</span>
<span class="pun">判断并读取应用行为定义文件(普通模式是<span class="pln"> <span class="typ">Application<span class="pun">/<span class="typ">Common<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="pln">tags<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span>
<span class="pun">加载框架底层语言包(普通模式是<span class="pln"> <span class="typ">ThinkPHP<span class="pun">/<span class="typ">Lang<span class="pun">/<span class="pln">zh<span class="pun">-<span class="pln">cn<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span>
<span class="pun">如果是部署模式则生成应用编译缓存文件</span>
<span class="pun">加载调试模式系统配置文件(<span class="typ">ThinkPHP<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="pln">debug<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span>
<span class="pun">判断并读取应用的调试配置文件(默认是<span class="pln"> <span class="typ">Application<span class="pun">/<span class="typ">Common<span class="pun">/<span class="typ">Conf<span class="pun">/<span class="pln">debug<span class="pun">.<span class="pln">php<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span>
<span class="pun">判断应用状态并读取状态配置文件(如果<span class="pln">APP_STATUS<span class="pun">常量定义不为空的话)</span></span></span>
<span class="pun">检测应用目录结构并自动生成(如果<span class="pln">CHECK_APP_DIR<span class="pun">配置开启并且<span class="pln">RUNTIME_PATH<span class="pun">目录不存在的情况下)</span></span></span></span></span>
<span class="pun">调用<span class="typ">Think<span class="pln">\App<span class="pun">类的<span class="pln">run<span class="pun">方法启动应用</span></span></span></span></span></span>
<span class="pun">应用初始化(<span class="pln">app_init<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">判断并加载动态配置和函数文件</span>
<span class="pun">调用<span class="typ">Think<span class="pln">\Dispatcher<span class="pun">::<span class="pln">dispatch<span class="pun">方法进行<span class="pln">URL<span class="pun">请求调度</span></span></span></span></span></span></span></span>
<span class="pun">自动识别兼容<span class="pln">URL<span class="pun">模式和命令行模式下面的<span class="pln">$_SERVER<span class="pun">[<span class="str">'PATH_INFO'<span class="pun">]参数</span></span></span></span></span></span></span>
<span class="pun">检测域名部署以及完成模块和控制器的绑定操作(<span class="pln">APP_SUB_DOMAIN_DEPLOY<span class="pun">参数开启)</span></span></span>
<span class="pun">分析<span class="pln">URL<span class="pun">地址中的<span class="pln">PATH_INFO<span class="pun">信息</span></span></span></span></span>
<span class="pun">获取请求的模块信息</span>
<span class="pun">检测模块是否存在和允许访问</span>
<span class="pun">判断并加载模块配置文件、别名定义、行为定义及函数文件</span>
<span class="pun">判断并加载模块的动态配置和函数文件</span>
<span class="pun">模块的<span class="pln">URL<span class="pun">模式判断</span></span></span>
<span class="pun">模块的路由检测(<span class="pln">URL_ROUTER_ON<span class="pun">开启)</span></span></span>
<span class="pln">PATH_INFO<span class="pun">处理(<span class="pln">path_info<span class="pun">)标签位侦听并执行绑定行为</span></span></span></span>
<span class="pln">URL<span class="pun">后缀检测(<span class="pln">URL_DENY_SUFFIX<span class="pun">以及<span class="pln">URL_HTML_SUFFIX<span class="pun">处理)</span></span></span></span></span></span>
<span class="pun">获取当前控制器和操作,以及<span class="pln">URL<span class="pun">其他参数</span></span></span>
<span class="pln">URL<span class="pun">请求调度完成(<span class="pln">url_dispatch<span class="pun">)标签位侦听并执行绑定行为</span></span></span></span>
<span class="pun">应用开始(<span class="pln">app_begin<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">调用<span class="pln">SESSION_OPTIONS<span class="pun">配置参数进行<span class="typ">Session<span class="pun">初始化(如果不是命令行模式)</span></span></span></span></span>
<span class="pun">根据请求执行控制器方法</span>
<span class="pun">如果控制器不存在则检测空控制器是否存在</span>
<span class="pun">控制器开始(<span class="pln">action_begin<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">默认调用系统的<span class="typ">ReadHtmlCache<span class="pun">行为读取静态缓存(<span class="pln">HTML_CACHE_ON<span class="pun">参数开启)</span></span></span></span></span>
<span class="pun">判断并调用控制器的<span class="pln">_initialize<span class="pun">初始化方法</span></span></span>
<span class="pun">判断操作方法是否存在,如果不存在则检测是否定义空操作方法</span>
<span class="pun">判断前置操作方法是否定义,有的话执行</span>
<span class="typ">Action<span class="pun">参数绑定检测,自动匹配操作方法的参数</span></span>
<span class="pun">如果有模版渲染(调用控制器<span class="pln">display<span class="pun">方法)</span></span></span>
<span class="pun">视图开始(<span class="pln">view_begin<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">调用<span class="typ">Think<span class="pln">\View<span class="pun">的<span class="pln">fetch<span class="pun">方法解析并获取模版内容</span></span></span></span></span></span>
<span class="pun">自动识别当前主题以及定位模版文件</span>
<span class="pun">视图解析(<span class="pln">view_parse<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">默认调用内置<span class="typ">ParseTemplate<span class="pun">行为解析模版(普通模式下面)</span></span></span>
<span class="pun">模版引擎解析模版内容后生成模版缓存</span>
<span class="pun">模版过滤替换(<span class="pln">template_filter<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">默认调用系统的<span class="typ">ContentReplace<span class="pun">行为进行模版替换</span></span></span>
<span class="pun">输出内容过滤(<span class="pln">view_filter<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">默认调用系统的<span class="typ">WriteHtmlCache<span class="pun">行为写入静态缓存(<span class="pln">HTML_CACHE_ON<span class="pun">参数开启)</span></span></span></span></span>
<span class="pun">调用<span class="typ">Think<span class="pln">\View<span class="pun">类的<span class="pln">render<span class="pun">方法输出渲染内容</span></span></span></span></span></span>
<span class="pun">视图结束(<span class="pln">view_end<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">判断后置操作方法是否定义,有的话执行</span>
<span class="pun">控制器结束(<span class="pln">action_end<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">应用结束(<span class="pln">app_end<span class="pun">)标签位侦听并执行绑定行为</span></span></span>
<span class="pun">执行系统的<span class="typ">ShowPageTrace<span class="pun">行为(<span class="pln">SHOW_PAGE_TRACE<span class="pun">参数开启并且不是<span class="pln">AJAX<span class="pun">请求)</span></span></span></span></span></span></span>
<span class="pun">日志信息存储写入</span>
代码:
1.入口文件(index.php)
// 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',True); // 定义应用目录 define('APP_PATH','./Application/'); // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php';
作用 1.设置是否是调试模式(在调试模式下即 APP_DEBUG 为True 时候 不会加载上一次编译过的 一个为~runtime.php 开发情况下 建议把开始调试模式)
2.定义APP_PATH 的路径
3.也是最重要的一个 引入ThinkPHP的入口,这里开始,正式开始进行复杂而又简单的TP框架之旅了,没有带好装备的人,可以带上装备,去刷TP框架了。
鄙人跟踪TP源码,在不对TP进行任何修改的情况下介绍页面是如何出现的
( PS: 由于鄙人也是第一次学TP框架 同样也是刚开始学PHP 希望在这里写上一点自己的心得 一来对自己思路做整理 同样也希望能帮助大家 如果有什么错误 希望大家提出 )
![在Illustrator中加载插件时出错[修复]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg)
启动AdobeIllustrator时是否会弹出加载插件时出错的消息?一些Illustrator用户在打开该应用程序时遇到了此错误。消息后面紧跟着一系列有问题的插件。该错误提示表明已安装的插件存在问题,但也可能是由于VisualC++DLL文件损坏或首选项文件受损等其他原因引起。如果遇到此错误,我们将在本文中指导您修复问题,请继续阅读以下内容。在Illustrator中加载插件时出错如果您在尝试启动AdobeIllustrator时收到“加载插件时出错”的错误消息,您可以使用以下用途:以管理员身

字幕在你的WindowsPC上不能在Stremio上运行吗?一些Stremio用户报告说,视频中没有显示字幕。许多用户报告说遇到了一条错误消息,上面写着“加载字幕时出错”。以下是与此错误一起显示的完整错误消息:加载字幕时出错加载字幕失败:这可能是您正在使用的插件或您的网络有问题。正如错误消息所说,可能是您的互联网连接导致了错误。因此,请检查您的网络连接,并确保您的互联网工作正常。除此之外,这个错误的背后可能还有其他原因,包括字幕加载项冲突、特定视频内容不支持字幕以及Stremio应用程序过时。如

随着互联网的发展,越来越多的网页需要支持滚动加载,而无限滚动加载是其中的一种。它可以让页面不断加载新的内容,使用户可以更流畅地浏览网页。在这篇文章中,我们将介绍如何使用PHP实现无限滚动加载。一、什么是无限滚动加载?无限滚动加载是一种基于滚动条的网页内容加载方式。它的原理是当用户滚动至页面底部时,通过AJAX异步调取后台数据,实现不断加载新的内容。这种加载方

css加载不出来的解决办法有检查文件路径、检查文件内容、清除浏览器缓存、检查服务器设置、使用开发者工具和检查网络连接等。详细介绍:1、检查文件路径,首先请确保CSS文件的路径正确,如果CSS文件位于网站的不同部分或子目录中,需要提供正确的路径,如果CSS文件位于根目录下,路径应该是直接的;2、检查文件内容,如果路径正确,那么问题可能出在CSS文件本身,打开CSS文件检查等等。

如果您在向Outlook插入超链接时遇到冻结问题,可能是由于网络连接不稳定、Outlook版本旧、防病毒软件干扰或加载项冲突等原因。这些因素可能导致Outlook无法正常处理超链接操作。修复插入超链接时Outlook冻结的问题使用以下修复程序解决插入超链接时Outlook冻结的问题:检查已安装的加载项更新Outlook暂时禁用您的防病毒软件,然后尝试创建新的用户配置文件修复办公室应用程序卸载并重新安装Office我们开始吧。1]检查已安装的加载项可能是Outlook中安装的某个加载项导致了问题。

在安装win7系统中,有网友遇到了加载usb驱动失败的情况,usb设备无法在新的win7系统中被识别,常见的u盘,鼠标等设备就无法使用了。那么安装win7加载usb驱动失败怎么办?下面小白就教下大家安装win7加载usb驱动失败的解决方法。方法一:1、首先我们打开电脑进入电脑系统,在电脑系统查看电脑的系统版本。确认电脑系统的版本与设备驱动的版本是否一致。2、确认驱动的版本后,将USB设备连接到电脑系统。电脑系统显示,设备无法连接到系统。3、在连接信息页面,点击帮助按钮查看帮助信息。4、如果电脑系

JavaScript如何实现滚动到页面底部自动加载的无限滚动效果?无限滚动效果是现代网页开发中常见的功能之一,它可以在滚动到页面底部时自动加载更多内容,使得用户可以无需手动点击按钮或链接就能够获取更多的数据或资源。在本文中,我们将探讨如何使用JavaScript来实现这一功能,并提供具体的代码示例。实现滚动到页面底部自动加载的无限滚动效果,主要分为以下

随着数据量不断增加,网页的滚动加载逐渐成为了用户体验的重要部分。在这篇文章中,我们将讨论如何使用Vue.js实现无限滚动加载的完整指南。什么是无限滚动加载?无限滚动加载,又称为无限滚动,是一种Web设计技术,用于在用户滚动页面到底部时添加更多内容。这种技术常用于博客、社交媒体、在线商店等需要动态显示内容的网站上。无限滚动与分页不同。在传统的分页中,用户必须通


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)