http://www.nowamagic.net/librarys/veda/detail/1285php
SAPI:Server Application Programming Interface 服务器端应用编程接口。 它提供了一个接口,使得PHP能够和其余应用进行交互数据。apache
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开始执行之后会通过两个主要的阶段:url
开始阶段有两个过程:
第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动之后的整个生命周期内或者命令行程序整个执行过程当中), 该过程只进行一次。
第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段, 例如经过url请求某个页面,则在每次请求以前都会进行模块激活(RINIT请求开始)。 例如PHP注册了一些扩展模块,则在MINIT阶段会回调全部模块的MINIT函数。 模块在这个阶段能够进行一些初始化工做,例如注册常量,定义模块使用的类等等。.net
请求到达以后PHP初始化执行脚本的基本环境,例如建立一个执行环境,包括保存PHP运行过程当中变量名称和值内容的符号表, 以及当前全部的函数以及类等信息的符号表。而后PHP会调用全部模块的RINIT函数, 在这个阶段各个模块也能够执行一些相关的操做 。命令行
请求处理完后就进入告终束阶段,通常脚本执行到末尾或者经过调用exit()或die()函数, PHP都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。blog