PHP内核探索:从SAPI接口开始
2017-04-09 00:00
816 查看
http://www.nowamagic.net/librarys/veda/detail/1285
SAPI:Server Application Programming Interface 服务器端应用编程接口。 它提供了一个接口,使得PHP可以和其他应用进行交互数据。
PHP的架构图
SAPI指的是PHP具体应用的编程接口, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
脚本执行的开始都是以SAPI接口实现开始的。只是不同的SAPI接口实现会完成他们特定的工作, 例如Apache的mod_php SAPI实现需要初始化从Apache获取的一些信息,在输出内容是将内容返回给Apache, 其他的SAPI实现也类似。
SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI。
PHP开始执行以后会经过两个主要的阶段:
处理请求之前的开始阶段
请求之后的结束阶段
开始阶段有两个过程:
第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次。
第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。 例如PHP注册了一些扩展模块,则在MINIT阶段会回调所有模块的MINIT函数。 模块在这个阶段可以进行一些初始化工作,例如注册常量,定义模块使用的类等等。
请求到达之后PHP初始化执行脚本的基本环境,例如创建一个执行环境,包括保存PHP运行过程中变量名称和值内容的符号表, 以及当前所有的函数以及类等信息的符号表。然后PHP会调用所有模块的RINIT函数, 在这个阶段各个模块也可以执行一些相关的操作 。
请求处理完后就进入了结束阶段,一般脚本执行到末尾或者通过调用exit()或die()函数, PHP都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。
SAPI:Server Application Programming Interface 服务器端应用编程接口。 它提供了一个接口,使得PHP可以和其他应用进行交互数据。
PHP的架构图
SAPI指的是PHP具体应用的编程接口, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
脚本执行的开始都是以SAPI接口实现开始的。只是不同的SAPI接口实现会完成他们特定的工作, 例如Apache的mod_php SAPI实现需要初始化从Apache获取的一些信息,在输出内容是将内容返回给Apache, 其他的SAPI实现也类似。
SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI。
PHP开始执行以后会经过两个主要的阶段:
处理请求之前的开始阶段
请求之后的结束阶段
开始阶段有两个过程:
第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次。
第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。 例如PHP注册了一些扩展模块,则在MINIT阶段会回调所有模块的MINIT函数。 模块在这个阶段可以进行一些初始化工作,例如注册常量,定义模块使用的类等等。
请求到达之后PHP初始化执行脚本的基本环境,例如创建一个执行环境,包括保存PHP运行过程中变量名称和值内容的符号表, 以及当前所有的函数以及类等信息的符号表。然后PHP会调用所有模块的RINIT函数, 在这个阶段各个模块也可以执行一些相关的操作 。
请求处理完后就进入了结束阶段,一般脚本执行到末尾或者通过调用exit()或die()函数, PHP都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。
相关文章推荐
- PHP内核探索:从SAPI接口开始
- PHP内核探索:从SAPI接口开始
- 1.PHP内核探索:从SAPI接口开始
- 1.PHP内核探索:从SAPI接口开始
- 1.PHP内核探索:从SAPI接口开始
- PHP内核探索 —— 从SAPI接口开始
- PHP内核探索:多进程/线程的SAPI生命周期
- 5.PHP内核探索:多进程/线程的SAPI生命周期
- PHP内核探索:单进程SAPI生命周期
- 7.PHP内核探索:再次探讨SAPI
- 2.PHP内核探索:一次请求的开始与结束
- 8.PHP内核探索:再次探讨SAPI
- PHP内核探索:一次请求的开始与结束
- PHP内核探索:再次探讨SAPI
- 2.PHP内核探索:一次请求的开始与结束
- PHP内核探索:继承与实现接口
- PHP内核探索:一次请求的开始与结束
- PHP内核探索:多进程/线程的SAPI生命周期
- 4.PHP内核探索:单进程SAPI生命周期
- PHP内核探索:一次请求的开始与结束