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都将进入结束阶段。和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后停用模块(RSHUWDOWN,对应RINIT), 一个在SAPI生命周期结束(Web服务器退出或者命令行脚本执行完毕退出)时关闭模块(MSHUTDOWN,对应MINIT)。

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

二、PHP内核探索:一次请求的开始与结束 - MINIT与RINIT相关推荐

  1. 五十二、PHP内核探索:使用哈希表API ☞ Zend把与HashTable有关的API分成了好几类

    Zend把与HashTable有关的API分成了好几类以便于我们寻找,这些API的返回值大多都是常量SUCCESS或者FAILURE. 创建HashTable 下面在介绍函数原型的时候都使用了ht名称 ...

  2. PHP内核探索之变量(1)Zval

    原文:PHP内核探索之变量(1)Zval 作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量 ...

  3. PHP内核探索之变量(1)Zval(自己看过不错儿)

    作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括 ...

  4. php内核探索方法与资源

    PHP内核探索 TIPI深入理解PHP内核 风雪之隅PHP源码分析 <php扩展开发及内核应用> 百度XLQ God's blog codinglabs PHP内核探索:从SAPI接口开始 ...

  5. PHP内核探索之变量(2)-理解引用

    PHP内核探索之变量(2)-理解引用 原文:PHP内核探索之变量(2)-理解引用 本文主要内容: 引论 符号表与zval 引用原理 回到最初的问题 一.引论 很久之前写了一篇关于引用的文章,当时写的寥 ...

  6. PHP内核探索之变量(4)- 数组操作

    原文:PHP内核探索之变量(4)- 数组操作 上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用 ...

  7. php内核探索 [转]

    PHP内核探索:从SAPI接口开始 PHP内核探索:一次请求的开始与结束 PHP内核探索:一次请求生命周期 PHP内核探索:单进程SAPI生命周期 PHP内核探索:多进程/线程的SAPI生命周期 PH ...

  8. php sapi zend,108 内核探索 --php扩展、zend引擎、sapi

    php内核探索系列文章 :http://www.nowamagic.net/librarys/veda/detail/1285 1.php请求流程 先看一个php请求的运行流程: 浏览器用户---&g ...

  9. php 内核 字符串 比较,PHP内核探索之变量- 不平凡的字符串

    切,一个字符串有什么好研究的. 别这么说,看过<平凡的世界>么,平凡的字符串也可以有不平凡的故事.试看: (1)       在C语言中,strlen计算字符串的时间复杂度是?PHP中呢? ...

最新文章

  1. 使用相对路径时,./、../、../../,代表的什么?
  2. 示波器_你真的懂示波器嘛?面试中会用到的示波器知识
  3. 给gridview动态生成radiobutton添加OnCheckedChanged事件
  4. Android学习之SQLite
  5. 北京某打工子弟学校之三
  6. datatable怎么根据两列分组_谈谈怎么做服务隔离
  7. ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)
  8. 设置mysql允许外网访问
  9. BZOJ 2754 喵星球上的点名(后缀数组)
  10. Linux服务器间信任关系建立方法
  11. C语言课程设计小孩吃梨,IQ题
  12. 二分查找算法+代码(通俗易懂简洁扼要)
  13. 批量修改文件内容(Python版)
  14. Ubuntu Kylin使用docker单机部署Fate联邦学习框架
  15. 抢跑AT拿到消费金融牌照后,度小满能否走过“J型曲线”拐点?
  16. 沪深股票历史财报数据查询系统网络共享版
  17. C# WPF使用CefSharp客户端内嵌浏览器做一个开小差工具
  18. C++常用STL库详细总结
  19. 硅谷钢铁侠 - 笔记
  20. Unsupervised Salience Learning for Person Re-identification(CVPR2013)

热门文章

  1. 使用海康视频插件,启动失败解决办法(基于VUE)
  2. 门窗设备之铝合金门窗制作工艺
  3. Java类加载器详解 1
  4. uiautomator2 使用Python测试 Android应用
  5. 接口文档管理工具-Postman、Swagger、RAP
  6. Alamofire使用进阶
  7. java 常用算法_Java常见算法整理
  8. 计算机短暂黑屏,为什么电脑会突然部分黑屏
  9. Nginx底层原理:解析Nginx为什么并发数可以达到3w!
  10. Python实践: 360壁纸提取脚本