一切的开始:SAPI接口

  SAPI(Server Application Programming Interface)指的是具体应用的编程接口。PHP脚本要执行有很多种方式,通过web服务器,或者直接在命令行下,也可以嵌入在其他程序中。

开始和结束

  php开始执行后会经过两个主要的阶段:处理请求之前的开始阶段和请求之后的结束阶段。

  开始阶段有两个过程:

  第一个过程是模块初始化阶段(MINIT),在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中),该过程只进行一次。

  第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段,例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。例如php注册了一些扩展模块,则MINIT阶段会回调所有模块的MINIT函数。模块在这个阶段可以进行一些初始化工作,例如注册常量,定义模块使用的类等等。模块在实现时可以通过如下宏来实现这些回调函数:

PHP_MINIT_FUNCTION(myphpextension)
{
//注册常量或者类等初始化操作
return SUCCESS;
}

请求到达之后php初始化执行脚本的基本环境,例如创建一个执行环境,包括保存php运行过程中变量名称和值内容的符号表,以及当前所有的函数以及类等信息的符号表。然后php会调用所有模块的RINIT函数,在这个阶段各个模块也可以执行一些相关的操作,模块的RINIT函数和MINIT函数类似:

PHP_RINIT_FUNCTION(myphpextension)
{
//例如记录请求开始时间
//随后在请求结束的时候记录结束时间。这样我们就能够记录下处理请求所花费的时间了
return SUCCESS;
}

请求处理完成后就进入了结束阶段,一般脚本执行到末尾或者通过调用exit()或die()函数,php都将进入结束阶段。

结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUTDOWN, 对应RINIT),一个在SAPI声明周期结束(web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。

PHP_RSHUTDOWN_FUNCTION(myphpextension)
{
//例如记录请求结束时间,并把相应的信息写入日志文件中
return SUCCESS;
}

单进程SAPI生命周期

CLI/CGI模式的PHP属于单进程的SAPI模式。这类的请求在处理一次请求后就关闭。也就是只会经过如下几个环节: 开始 - 请求开始 - 请求关闭 - 结束 SAPI接口实现就完成了其生命周期。如图2.1所示:

图2.1 单进程SAPI生命周期

如上的图是非常简单,也很好理解。只是在各个阶段之间PHP还做了许许多多的工作。这里做一些补充:

最新文章

  1. Mysql查询按照某字段指定顺序排序
  2. RHEL7网络管理之nmcli
  3. java基础(1)-比较jdk5,jdk6,jdk7的新特性
  4. (转)阴影锥(Shadow Volume)
  5. DataTable添加行和列数据
  6. .NET 笔试题--自已作答
  7. ARM Linux从Bootloader、kernel到filesystem启动流程
  8. css first-letter实现首字(字母)下沉效果
  9. Win+R指令(2)
  10. MongoDB 复制
  11. 读取和存储文本文件,UTF-8和GB2312通用的函数
  12. 十二、oracle 数据库(表)的逻辑备份与恢复
  13. 解决使用JavaScriptConvert转换对象为Json时,中文和&符号被转码的问题
  14. 万能选项卡,tab选项卡
  15. “XcodeGhost”病毒之后,苹果更应注…
  16. python实现博客自动刷点击脚本
  17. Unity骨骼动画资源解析与优化
  18. C#中get和set
  19. angularjs的ng-change事件演示
  20. spring 中常用的两种事务配置方式以及事务的传播性、隔离级别

热门文章

  1. Oracle查看数据占用的空间和数据文件实际空间的信息
  2. Java&Selenium 模拟鼠标方法封装
  3. web页面长时间未操作自动退出登录
  4. java之spring
  5. Vue 组件的通信
  6. C#中'??'符的使用
  7. VUE cli 4.x下配置多页面以及同时配置支持element-ui及mint-ui并且优化首页文件大小。
  8. Appium自动化测试教程-自学网-Package与Activity
  9. SIGAI深度学习第三集 人工神经网络2
  10. vue+axios+elementUI文件上传与下载