tp原理



最新文章

  • 【redis】redis的 key的命名规则
  • unix:///var/run/supervisor/supervisor.sock refused connection问题
  • nginx 实现if嵌套类似逻辑
  • apache的.htaccess文件同时实现HTTPS跳转及伪静态去掉index.php
  • LaravelGroupBy报错 关闭mysql严格模式配置

分类专栏

  • redis 1篇
  • nginx 1篇
  • nuxt 1篇
  • phpexcel 2篇
  • html js 1篇
  • laravel6.0 2篇
  • jquery 15篇
  • php 58篇
  • nodejs 4篇
  • javascript 8篇
  • json 2篇
  • linux 8篇
  • mysql 12篇
  • apache 3篇
  • python 2篇

归档

2020
6月 3篇
5月 9篇
4月 5篇
3月 9篇
2月 2篇
1月 1篇
2019
12月 5篇
11月 4篇
10月 2篇
9月 4篇
2018
9月 2篇
8月 1篇
5月 1篇
4月 1篇
3月 8篇
2月 2篇
1月 1篇
2017
12月 3篇
10月 2篇
9月 3篇
8月 7篇
7月 3篇
6月 1篇
5月 6篇
4月 2篇
3月 4篇
2月 9篇
1月 4篇
2016
12月 7篇
11月 3篇

最新评论

  • datatables中该列获取其他...

    baidu_36025777:有用,点个赞

  • MYSQL中可以实现类似IF判断的...

    weixin_44110998:好评

  • nodejs 学习day4 模...

    qq_29427971:你好,怎么加你

  • turn.js实现图书翻页效果

    weixin_42362665:如何实现通过点击书下面的图片更换另一本书进行阅读

  • HTML5中的audio在手机端和...

    qq_42957741:可以吗?

	

thinkphp框架加载流程以及原理

总体来说,应用的流程涉及到几个文件:
Index.php
ThinkPHP.php
Think.class.php
App.class.php
Dispatcher.class.php
ThinkPHP/Mode/common.php
ReadHtmlBehavior.class.php
Route.class.php
Hook.class.php
ContentReplaceBehavior.class.php
WriteHtmlCacheBehavior.class.php

ThinkPHP框架开发的应用的标准执行流程如下:
1. 用户URL请求
2. 调用应用入口文件(通常是网站的index.php)
3. 载入框架入口文件(ThinkPHP.php)
4. 记录初始运行时间和内存开销

  1. (引用自ThinkPHP.php)
  2. // 记录开始运行时间
  3. $GLOBALS['_beginTime'] = microtime(TRUE);
  4. // 记录内存初始使用
  5. define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
  6. if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();
复制代码
5. 系统常量判断及定义
  1. (引用自ThinkPHP.php)
  2. // 系统常量定义
  3. defined('THINK_PATH')   or define('THINK_PATH',     __DIR__.'/');
  4. defined('APP_PATH')     or define('APP_PATH',       dirname($_SERVER['SCRIPT_FILENAME']).'/');
  5. defined('APP_STATUS')   or define('APP_STATUS',     ''); // 应用状态 加载对应的配置文件
  6. defined('APP_DEBUG')    or define('APP_DEBUG',      false); // 是否调试模式
复制代码
6. 载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化
  1. (引用自ThinkPHP.php)
  2. // 应用初始化 
  3. Think\Think::start();
复制代码
7. 设置错误处理机制和自动加载机制
  1. (引用Think.class.php)
  2. // 注册AUTOLOAD方法
  3.       spl_autoload_register('Think\Think::autoload');      
  4.       // 设定错误和异常处理
  5.       register_shutdown_function('Think\Think::fatalError');
  6.       set_error_handler('Think\Think::appError');
  7.       set_exception_handler('Think\Think::appException');
复制代码
8. 调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)
  1. (引用Think.class.php)
  2. // 初始化文件存储方式
  3.    Storage::connect(STORAGE_TYPE);
复制代码
9. 部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤22)
  1. (引用Think.class.php)
  2. if(!APP_DEBUG && Storage::has($runtimefile)){
  3.           Storage::load($runtimefile);
  4.       }
复制代码
10. 读取应用模式(由APP_MODE常量定义)的定义文件(以下以普通模式为例说明)
Thinkphp框架默认的应用模式 为普通模式。
  1. (引用Think.class.php)
  2. // 读取应用模式
  3.           $mode   =   include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
复制代码
11. 加载当前应用模式定义的核心文件(普通模式是 ThinkPHP/Mode/common.php)
  1. (common.php)
  2. THINK_PATH.'Conf/convention.php',   // 系统惯例配置
  3. CONF_PATH.'config'.CONF_EXT,      // 应用公共配置
复制代码
12. 加载惯例配置文件(普通模式是 ThinkPHP/Conf/convention.php)

13. 加载应用配置文件(普通模式是 Application/Common/Conf/config.php) 

14. 加载系统别名定义
  1. (common.php)
  2. // 别名定义
  3.     'alias'     =>  array(
  4.         'Think\Log'               => CORE_PATH . 'Log'.EXT,
  5.         'Think\Log\Driver\File'   => CORE_PATH . 'Log/Driver/File'.EXT,
  6.         'Think\Exception'         => CORE_PATH . 'Exception'.EXT,
  7.         'Think\Model'             => CORE_PATH . 'Model'.EXT,
  8.         'Think\Db'                => CORE_PATH . 'Db'.EXT,
  9.         'Think\Template'          => CORE_PATH . 'Template'.EXT,
  10.         'Think\Cache'             => CORE_PATH . 'Cache'.EXT,
  11.         'Think\Cache\Driver\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
  12.         'Think\Storage'           => CORE_PATH . 'Storage'.EXT,
  13.     ),
复制代码
15. 判断并读取应用别名定义文件(普通模式是 Application/Common/Conf/alias.php)
16. 加载系统行为定义
17. 判断并读取应用行为定义文件(普通模式是 Application/Common/Conf/tags.php)
  1. (tags.php)
  2. 'app_init'=>array('Common\Behavior\InitHookBehavior')
复制代码
18. 加载框架底层语言包(普通模式是 ThinkPHP/Lang/zh-cn.php)
19. 如果是部署模式则生成应用编译缓存文件
20. 加载调试模式系统配置文件(ThinkPHP/Conf/debug.php)
21. 判断并读取应用的调试配置文件(默认是 Application/Common/Conf/debug.php)
22. 判断应用状态并读取状态配置文件(如果APP_STATUS常量定义不为空的话)
  1. think.class.php
  2. // 读取当前应用状态对应的配置文件
  3.    if(APP_STATUS && is_file(CONF_PATH.APP_STATUS.CONF_EXT))
  4.    C(include CONF_PATH.APP_STATUS.CONF_EXT);   
复制代码
23. 检测应用目录结构并自动生成(如果CHECK_APP_DIR配置开启并且RUNTIME_PATH目录不存在的情况下)
  1. think.class.php
  2. // 检查应用目录结构 如果不存在则自动创建
  3.       if(C('CHECK_APP_DIR')) {
  4.           $module     =   defined('BIND_MODULE') ? BIND_MODULE : C('DEFAULT_MODULE');
  5.           if(!is_dir(APP_PATH.$module) || !is_dir(LOG_PATH)){
  6.               // 检测应用目录结构
  7.               Build::checkDir($module);
  8.           }
  9.       }
复制代码
24. 调用Think\App类的run方法启动应用
  1. think.class.php
  2. // 运行应用
  3.       App::run();
复制代码
25. 应用初始化(app_init)标签位侦听并执行绑定行为
26. 判断并加载动态配置和函数文件
27. 调用Think\Dispatcher::dispatch方法进行URL请求调度
  1. App.class.php
  2. Dispatcher::dispatch();
复制代码
28. 自动识别兼容URL模式和命令行模式下面的$_SERVER['PATH_INFO']参数
  1. Dispatcher.class.php
  2.             $_SERVER['PATH_INFO'] = $_GET[$varPath];
复制代码
29. 检测域名部署以及完成模块和控制器的绑定操作(APP_SUB_DOMAIN_DEPLOY参数开启)
  1. Dispatcher.class.php
复制代码
30. 分析URL地址中的PATH_INFO信息
  1. Dispatcher.class.php
复制代码
31. 获取请求的模块信息
32. 检测模块是否存在和允许访问
33. 判断并加载模块配置文件、别名定义、行为定义及函数文件
34. 判断并加载模块的动态配置和函数文件
35. 模块的URL模式判断
36. 模块的路由检测(URL_ROUTER_ON开启)
  1. Dispatcher.class.php
复制代码
37. PATH_INFO处理(path_info)标签位侦听并执行绑定行为
38. URL后缀检测(URL_DENY_SUFFIX以及URL_HTML_SUFFIX处理)
39. 获取当前控制器和操作,以及URL其他参数
40. URL请求调度完成(url_dispatch)标签位侦听并执行绑定行为
41. 应用开始(app_begin)标签位侦听并执行绑定行为
  1. App.class.php    
  2. static public function run() {
  3.         // 应用初始化标签
  4.         Hook::listen('app_init');
  5.         App::init();
  6.         // 应用开始标签
  7.         Hook::listen('app_begin');
复制代码
42. 调用SESSION_OPTIONS配置参数进行Session初始化(如果不是命令行模式)
  1. // Session初始化
  2.         if(!IS_CLI){
  3.             session(C('SESSION_OPTIONS'));
  4.         }
复制代码
43. 根据请求执行控制器方法
44. 如果控制器不存在则检测空控制器是否存在
45. 控制器开始(action_begin)标签位侦听并执行绑定行为
  1. Controller.class.php
  2. public function __construct() {
  3.         Hook::listen('action_begin',$this->config);
  4.         //实例化视图类
  5.         $this->view     = Think::instance('Think\View');
  6.         //控制器初始化
  7.         if(method_exists($this,'_initialize'))
  8.             $this->_initialize();
  9.     }
复制代码
46. 默认调用系统的ReadHtmlCache行为读取静态缓存(HTML_CACHE_ON参数开启)
47. 判断并调用控制器的_initialize初始化方法
  1. Controller.class.php
  2. if(method_exists($this,'_initialize'))
  3.             $this->_initialize();
复制代码
48. 判断操作方法是否存在,如果不存在则检测是否定义空操作方法
49. 判断前置操作方法是否定义,有的话执行
50. Action参数绑定检测,自动匹配操作方法的参数
51. 如果有模版渲染(调用控制器display方法)
52. 视图开始(view_begin)标签位侦听并执行绑定行为
53. 调用Think\View的fetch方法解析并获取模版内容
  1. View.class.php
复制代码
54. 自动识别当前主题以及定位模版文件
55. 视图解析(view_parse)标签位侦听并执行绑定行为
  1. View.class.php
  2.                
  3.             Hook::listen('view_parse',$params);
  4. common.php
  5. 'view_parse'    =>  array(
  6.             'Behavior\ParseTemplateBehavior', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
  7.         ),
复制代码
56. 默认调用内置ParseTemplate行为解析模版(普通模式下面)
  1. View.class.php
  2.     public function parseTemplate($template='') 
复制代码
57. 模版引擎解析模版内容后生成模版缓存

58. 模版过滤替换(template_filter)标签位侦听并执行绑定行为
  1. Template.class.php
  2.         Hook::listen('template_filter',$tmplContent);
复制代码
59. 默认调用系统的ContentReplace行为进行模版替换
  1. 'template_filter'=> array(
  2.             'Behavior\ContentReplaceBehavior', // 模板输出替换
  3.         ),
  4. ContentReplaceBehavior.class.php
  5. class ContentReplaceBehavior {
复制代码
60. 输出内容过滤(view_filter)标签位侦听并执行绑定行为
  1. 'view_filter'   =>  array(
  2.             'Behavior\WriteHtmlCacheBehavior', // 写入静态缓存
  3.         ),
复制代码
61. 默认调用系统的WriteHtmlCache行为写入静态缓存(HTML_CACHE_ON参数开启)
  1. WriteHtmlCacheBehavior.class.php
  2. class WriteHtmlCacheBehavior {
复制代码
62. 调用Think\View类的render方法输出渲染内容
63. 视图结束(view_end)标签位侦听并执行绑定行为
  1. view.class.php
复制代码
64. 判断后置操作方法是否定义,有的话执行
65. 控制器结束(action_end)标签位侦听并执行绑定行为
  1. Controller.class.php
复制代码
66. 应用结束(app_end)标签位侦听并执行绑定行为
  1. App.class.php        
  2. Hook::listen('app_end');
复制代码
67. 执行系统的ShowPageTrace行为(SHOW_PAGE_TRACE参数开启并且不是AJAX请求)
68. 日志信息存储写入
        
  • 点赞 2
  • 评论 1
  • 分享
    x

    海报分享

    扫一扫,分享海报

  • 收藏
  • 手机看

    分享到微信朋友圈

    x

    扫一扫,手机阅读

    • 文章举报
  • 关注
收起全文

qq_23875211的博客

10-30 921

thinkphp框架简要概述

thinkphp1,概述:是基于php基础开发,进行归纳整理的国内主流 框架 thinkphp 框架大体分为两类: thinkphp3版和 thinkphp5(1) thinkphp3.2版:(不推荐)多用于以前的网站的更新与维护;(2) thinkphp5.1版:(推荐)是现如今比较新的版本,它对接口更加的亲切,页面也 更加新颖,加入了看云小助手,还有调试报错也更加的好看,建议新手不要学旧版本了......
  • 上一页
  • 1
  • 下一页

PHPer小成

07-12 6804

ThinkPHP中URL解析原理,以及URL路由使用教程!

几个概念: THINKPHP 基于 MVC 框架,使用PATHINFO解析出分组名,模块名,方法名,以及参数。PATHINFO:就是 http://localhost/index.php/Home/Index/index/a/1/b/2?c=3 中的红色部分,注意,c=3并不是pathinfo的一部分,它是一个query参数。PATHINFO指的是URL中的路径实际上不存在的时候,apache...

thinkphp5框架实现原理框架启动(简易版)_geek1992的..._CSDN博客

6-16

目录 一、入口文件 index.php 二、 框架引导文件 core目录下start.php 三、基础文件 core目录下的base.php thinkphp5 框架实现 原理框架启动(简易版)...

ThinkPHP 框架执行流程分析_thinkphp,框架,原理_u01283..._CSDN博客

1-8

总体来说,应用的 流程涉及到几个文件:Index.php ThinkPHP.phpThink.class... Thinkphp 框架默认的应用模式 为普通模式。 (引用Think.class.php) // 读取应用模式 $mo...

Focus

02-12 820

Thinkphp文件加载顺序

[14-02-12 20:32:02] /data1/www/htdocs/470/wei88888/1/app/_Core/Lib/Behavior/LocationTemplateBehavior.class.php (25) LocationTemplateBehavior->parseTemplateFile()[14-02-12 20:32:02] /data1/www/htdocs

ThinkPhp框架的结构和执行过程 - Super乐De博客 - CSDN博客

12-5

1.基础 1.1目录结构 thinkphp 框架目录 1.2入口文件 1.3系统常量 1.4自动生成 默认模板 自动生成 1.5模块设计 每个模块是相对独立的,其目录结构如下: 1.6控制器...

thinkphp5框架实现原理二 自动加载(简易版)_geek1992的..._CSDN博客

1-6

thinkphp5 框架实现 原理加载惯例配置文件(简易版) 阅读数 490 一、引入系统配置文件core\convention.php\core\Config::set(include CORE_PATH . 'convention' ....

qq_38320255的博客

07-19 3788

phpstudy的安装及ThinkPHP框架

1.   我们开始学习 ThinkPHP 框架,第一件事是要在自己的电脑上安装一个php的服务器,其实很简单。只需要下载一个phpstudy即可。    phpstud集成了Apache+MySQL+phpMyadmin,一次性安装,且不需要配置即可使用。是非常好用的PHP调试环境。下载方式:直接搜狗phpstudy。会出现以下界面。直接点击下载,然后按照默认的安装就可以了。......

04-17 48

[草稿]系统流程

本篇文章是官方手册的一些"理解",不是解释,我个人的理解,如果有错误,请各位留言回复哈。用户URL请求用户进入页面嘛,这个很好理解,不多说调用应用入口文件(通常是网站的index.php)也有可能是 admin.php,user.php 之类的文件。总之,就是 require_......

Thinkphp框架执行流程图.pdf-PHP其他资源

6-15

全面的 thinkphp 框架执行 流程图,详细介绍了 thinkphp中每个控制器的流转更多下载资源、学习资料请访问CSDN下载频道.

深入理解ThinkPHP框架路由的实现_PHP_红袖添香的博客-CSDN博客

4-14

ThinkPHP中URL解析 原理,以及URL路由使用教程! 阅读数 6618 几个概念: THINKPHP 基于 MVC 框架,使用PATHINFO解析出分组名,模块名,方法名,以及参数。PATHINFO:就是...

jackbon8的博客

07-11 1584

tp5完整加载执行流程——thinkphp5 框架

1,入口文件(tp5\public\index.php)作用: 1)定义目录常量 2) 加载 框架引导目录2. 加载 框架引导文件(tp5\ thinkphp\start.php)作用: 1)引导基础文件 2)对应用进行运转3. 加载 框架基础引导文件(tp5\ thinkphp\base.php)作用: 1) 加载系统常量......

geek1992的博客

07-02 1398

thinkphp5框架实现原理二 自动加载(简易版)

一、在base.php中 \core\Loader::register();载入自动 加载 /** * @param null $autoload * 自动 加载 */ public static function register($autoload = null) { // 注册系统自动 加载(核心目录Loader的autoload方法)...

ThinkPHP2.2框架执行原理流程图在线手册_bbyyzhang的..._CSDN博客

6-12

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

ThinkPHP框架概述 - bboyjoe的博客

12-17

Thinkphp 框架执行 流程图.pdf 12-13 全面的 thinkphp 框架执行 流程图,详细介绍了 thinkphp中每个控制器的流转 下载 thinkphp5 框架实现 原理框架启动(简易版) ...

程镜的博客

05-06 109

TP6多应用 常用设置方法

【1】自定义模版路径设置修改config配置目录下的view.php 模版配置文件'view_path'=>root_path().'public/template/', //设置模版路径控制选择模版return view('/web/index');...

weixin_34088583的博客

07-27 57

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

2019独角兽企业重金招聘Python工程师标准>>> ...

thinkphp5框架实现原理加载惯例配置文件(简易版) - geek1992的...

12-11

ThinkPHP惯例配置讲解 阅读数 487 ThinkPHP 框架是国人开发的优秀PHP 框架之一, ThinkPHP文档还有代码注释都是中文的,学习起来非常的顺手。下面主要介绍下 ThinkPHP惯例...

qq_39418278的博客

05-08 4563

基于thinkphp5开发的博客系统

博客系统使用说明一、本系统是基于PHP+MYSQL+Apache所开发的,使用 thinkphp5 框架,博主可在后台界面进行文章的增添,修改和删除操作。将文件夹中的tp5文件移动到本机www文件夹中 二、首先将data文件夹中的bolg文件夹复制到mysql数据库中 三、修改application文件夹中的database.php文件 将username的root替换成本机数据库账号,passwor......

咪哥杂谈

01-15 1万+

一份王者荣耀的英雄数据报告

咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...

ferrysoul的博客

10-15 8701

thinkPHP框架学习(速成,一天)

一。TP 框架介绍与配置第一个是最开始沿用的一种结构,它有一个致命的缺点:比如说如果后端程序员在编写的过程中,前端程序就不能做修改,一旦修改了,那么肯定会有冲突。后来大家进行了改进----把前端脱离出来。再后来又进行了改进,把逻辑和业务分离,也就出现了MVC结构。MVC不是一种新的技术,而是在原有代码的基础上,帮我们把业务逻辑理的更清晰而形成的代码分层编写的一种结构。......

咔咔博客

11-07 850

【TP5.1】配置加载顺序

author:咔咔wechat:fangkangfk 配置的 加载顺序:先惯例配置 –》 再 加载tags.php(行为钩子)-> common.php( 加载公共文件)-》helper.php(助手函数)-》middleware.php(全局中间件)-》provider.php(自定义容器)-》最后应用配置 首先我们来做一个这样的操作,在控制器里边输出一下config信息......

沉默王二

02-25 39万+

推荐10个堪称神器的学习网站

每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。”今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈)既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推......

geek1992的博客

07-02 5366

thinkphp5框架实现原理框架启动(简易版)

一、入口文件 index.php<?php define('DS', DIRECTORY_SEPARATOR); // 定义应用目录 define('APP_PATH', __DIR__ . '/app/'); // 定义根目录 defined('ROOT_PATH') or define('ROOT_PATH', __DIR__ . DS); ...

hsd2012的专栏

03-01 3373

ThinkPHP5.0执行流程分析

1.入口文件index.php定义项目需要的常量2.start.php定义think命名空间引入base.php文件         定义很多系统需要的常量引入loader.php文件使用sql_autoload_register注册自动 加载事情,如果实例化了一个未引进的类,就调用Loader.php里面的autoload方法进行 加载。在loader类中,定义了静态变量...

倾城之恋----PHP的专栏

11-07 423

ThinkPHP教程--20--系统流程

我们来系统的了解下 ThinkPHP 框架开发的应用的标准执行 流程:用户URL请求调用应用入口文件(通常是网站的index.php)载入 框架入口文件( ThinkPHP.php)记录初始运行时间和内存开销系统常量判断及定义载入 框架引导类(Think\Think)并执行Think::start方法进行应用初始化设置错误处理机制和自动 加载机制调用Think\Storage类进行存储初始化(由STORAG...
                
                    

你可能感兴趣的:(tp,php)