02-一次请求的开始与结束
2016-04-24 18:31
671 查看
PHP开始执行以后会经过两个主要的阶段:
处理请求之前的开始阶段
请求之后的结束阶段
开始阶段有两个过程:
第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次。
第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。 例如PHP注册了一些扩展模块,则在MINIT阶段会回调所有模块的MINIT函数。 模块在这个阶段可以进行一些初始化工作,例如注册常量,定义模块使用的类等等。
模块在实现时可以通过如下宏来实现这些回调函数:
请求到达之后PHP初始化执行脚本的基本环境,例如创建一个执行环境,包括保存PHP运行过程中变量名称和值内容的符号表, 以及当前所有的函数以及类等信息的符号表。然后PHP会调用所有模块的RINIT函数, 在这个阶段各个模块也可以执行一些相关的操作,模块的RINIT函数和MINIT回调函数类似:
请求处理完后就进入了结束阶段,一般脚本执行到末尾或者通过调用exit()或die()函数, PHP都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。
处理请求之前的开始阶段
请求之后的结束阶段
开始阶段有两个过程:
第一个过程是模块初始化阶段(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都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。
PHP_RSHUTDOWN_FUNCTION(myphpextension) { // 例如记录请求结束时间,并把相应的信息写入到日至文件中。 return SUCCESS; }
相关文章推荐
- layoutSubview的方法总结
- 20145215《Java程序设计》第8周学习总结
- CString由Unicode转为utf8格式
- 第6讲 SQL语言概述
- 使用 jquery.validate.messages_cn.js 插件实现表单自动验证,出现中文乱码
- 文章标题
- python基础练习(四)—— 读取文件内容
- (SDL)(01)SDL Introduction
- csuoj-1723-想打架吗?算我一个!所有人,都过来!
- 01-从SAPI接口开始
- Struts学习总结
- 关于 Android 进程保活,你所需要知道的一切
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛
- php面试题及答案收藏(转)
- C++ URLEncode编码
- csuoj-1726-你经历过绝望吗?两次!
- html
- 链接贴子为自己以后方便查阅
- 【转载】Gradle学习 第七章:Java快速入门
- C++ 语法学习