zoukankan      html  css  js  c++  java
  • 以 ThinkPhp 为例,理解 PHP 框架的入口

    以 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,

    这样就可以了。

  • 相关阅读:
    centos7 /etc/rc.local需要chmod +x /etc/rc.d/rc.local
    epel源
    yum 源
    socket
    CentOS 7使用systemctl如何补全服务名称
    keepalive脑裂的处理,从节点发现访问的虚拟IP就报警,同时尝试发送内容到主节点服务器关闭keepalive和nginx,或者关机
    nginx的 keepalive_timeout参数是一个请求完成之后还要保持连
    kickstart安装步骤
    kickstart
    因客户机IP与服务器IP不在同一网段导致无盘客户机开机卡tftp,提示:PXE-E11: ARP timeout
  • 原文地址:https://www.cnblogs.com/liuwei-a/p/10197876.html
Copyright © 2011-2022 走看看