以 ThinkPhp 为例,理解 PHP 框架的入口

2018-12-29 19:55

ThinkPhp 是用 PHP 语言写的,它所影响到的范围是 PHP 内部,ThinkPhp 必须先被加载起来,它才能工作,所以整体思路是获得入口的加载机会,然后执行框架本身的功能,再调起在框架上开发的功能,例如,URL对应的代码。

ThinkPhp 需要外部做的事情是,对于需要 ThinkPhp 处理的页面,调用 ThinkPhp 入口,入口的名字叫 index.php,将 URL 的信息以参数的形式传给 index.php。调起 index.php 是 PHP 本身的功能,index.php 跑起来,就有了 ThinkPhp,即,ThinkPhp 开始工作了。

如果没有 ThinkPhp 这个框架,PHP 本身也可以实现各种功能。ThinkPhp 的 index.php,和其它的 php 文件一样,都是 php 文件,可以和目录中的其它 php 文件并存。如果被调起的不是 ThinkPhp 的 index.php,这次调用就和 ThinkPhp 无关了。

环境中有这些角色:

  • nginx,
  • php-fpm,
  • php, 其中包括:
  • ThinkPhp
  • 其它 php

在没有 ThinkPhp 的情况下,php 是这样被调起来的:

客户端以浏览器为例。浏览器将请求发送给 nginx。

nginx 收到请求,按照配置文件中的内容进行匹配,php 对应的规则被匹配上,执行规则下面的指令,指令的功能是将请求转发给 php-fpm,转发的内容包括:

  • 根目录的位置,
  • 完整的 http 消息(其中含有 url),等,

这些都是 nginx 在做。

php-fpm 收到请求之后,解析 url,结合根目录,定位到 php 文件,执行这个 php 文件(php 是脚本语言,是可以运行的),这个 php 文件中有输出内容的语句(例如,echo 语句),这些内容输出到了 php-fpm 中。等 php 文件执行结束,php-fpm 将这些内容放入到 http 响应消息中,发送给 nginx。

nginx 收到响应,将响应发送给浏览器。

ThinkPhp 的调起方式是这样的:

http://xxx/index.php?index&index

或者

http://xxx/index.php?index/index

注意:问号(?)作为参数的起始分隔符,不可改变,如果将问号(?)改为斜线(/),index.php 就不是要加载的 php 文件了。

nginx 中的重写功能,可以让上面的 url 变得好看一点,例如:

http://xxx/index/index

nginx 的工作原理是“匹配规则 + 指令”,这里规则可以是:

  • 不存在的 url,
  • 或其它规则

指令为:

将加载的页面修改为 ThinkPhp 的 index.php,将 index/index 作为参数传递给这个页面,即,将 url 修改为:

http://xxx/index.php?index/index

接下来,会匹配到 php 的通用规则,一般是:

  • 文件带有“.php”后缀

指令为:

  • 将请求转发给 php-fpm,

这样就可以了。

原文地址:https://www.cnblogs.com/liuwei-a/p/10197876.html

时间: 2024-10-30 01:48:47

以 ThinkPhp 为例,理解 PHP 框架的入口的相关文章

ThinkPHP讲解(一)框架基础

ThinkPHP框架知识点过于杂乱,接下来将以问题的形势讲解tp(ThinkPHP的简写) 1.tp框架是什么,为什么使用是它? 一堆代码的集合,里边有变量.函数.类.常量,里边也有许多设计模式MVC.AR数据库.单例等等.框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次. 为什么使用框架 框架可以帮组我们快速.稳定.高效搭建程序系统 该系统由于框架的使用使得本身的维护性.灵活性.适应客户需求方面得到最大化的增强. 使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关

thinkPHP之微理解

1.支持win和unix服务器环境,遵循Apache2开源协议. 2.借鉴struct架构,MVC设计模式等 3.几个重要概念: Dao:DataAccessObject(数据访问对象) VO对象:ValueObject(数据对象,或者是业务对象) VoList对象:ThinkPHP数据操作的基本元素. 4.分层架构: 表现层:模板视图.用户界面.js.flash等 业务层:业务接口.业务逻辑层.实体层.数据访问层,action控制器作为业务接口层,提供各种业务操作的入口. 数据层:即Msql.

vue中$event理解和框架中在包含默认值外传参

vue中$event理解和框架中在包含默认值外传参:https://blog.csdn.net/qq_43702430/article/details/90692242?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1 原文地址:https://

“Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

目录: “Zhuang.Data”轻型数据库访问框架(一)开篇介绍 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 先来看一段代码 DbAccessor dba = DbAccessor.Create(); var dt = dba.QueryDataTable("select * from sys_product where productid=#Id#",new {Id=1}); Console.WriteLine(DataTableUtil.

Android电商开发(2)框架配置入口设计

Android电商开发(2)框架配置入口设计 项目根据课程大佬讲解可以用单activity和多个fragment来实现.这样的好处就在于可以是产品更加的顺滑. 1.初始化配置 由上一部分可以知道,软件的初始化配置需要写在核心module中.在book_core中创建一个包名为app,用来统管整个app.在包中new一个class为Book.把全局的一些信息存在一个map里,在任何一个引用这个库的业务逻辑里都可以引用他.新建一个类Configurator来管理这些配置信息,这个类用来配置文件的获取

背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能

背景减法库(BGS Library = background subtraction library)包含了37种背景建模算法,也是目前国际上关于背景建模技术研究最全也最权威的资料.本文将更加详细的介绍背景减法库(BGS Library)的基本框架与入口函数main()的功能. BGS库的整体框架在背景建模技术(二)中已经全部给出,此处从函数的角度再次给出BGS库的基本框架,有利于代码的修改与维护. 如下图所示是基于C++的BGS库的函数流程图: 接下来将会对每个函数进行更加详细的分析. 首先,

从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs

[突然领悟] 今天看了一遍reactjs,突然发现和自己一直用的freemarker的宏十分相似, 突然领悟了很多前端吊炸天的概念,框架,特写此文,欢迎批评指正. [nodejs] 官网:https://nodejs.org/ 简介:对前端来说极其重要的一个"框架",简直可以说是开天辟地 类比Java中:JVM 详述: 就前端来说nodejs具有划时代的意义,做前端的没用过nodejs都不好意思说自己是前端, 做后端的没听过nodejs,或者说不出nodejs和java的优缺点,也不是

深入理解WPF框架下await的实践

前言: 这一段时间开始在着手WPF的项目,在开发过程的间歇恶补下WPF基础.asyc await作为framework4.5的新特性,也在我的项目中得到应用.有个这个特性以后确实又是一个大大的语法糖福利,程序代码漂亮简洁多.大致的执行顺序也可以从院子的一篇「async & await的前世今生」得知,微软msdn的例子也是简洁明了,但是总有一种“知其然而不知所以然”的感觉,萦绕在心头很是难受.微软给我们封装得太好了,让我们即使“不求甚解”的情况下也可以玩得转.就像是骇客帝国,不甘心与再在这个“盒

理解MVC 框架

前言:很多前端开发者面临着这样的问题,在项目开发中承担的工作越来越多,后端要做的越来越少,需要的技术棧越来越多,经常有人问你个技术是你完全不会的,对自己的职业生涯越来越怀疑.从前认为HTML+CSS+js+jQuery能解决的问题,突然间变LOW了,要用新技术解决. 前端面临的新技术到底是什么?也许看了这篇文章你能找到一点答案. 很多人误解前端的工作是切图,指将UI提供的设计稿制作成html+css布局的静态页面,有利于交互,形成良好的视觉感.其实这是一种误解,当然也许这是前端甩开膀子干的第一步