文档章节

PHP内核探索:一次请求的开始与结束

贪睡猫仙mosen
 贪睡猫仙mosen
发布于 2014/02/18 11:57
字数 591
阅读 55
收藏 0

开始阶段有两个过程:

第一个过程是模块初始化阶段(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;     
    }


本文转载自:http://www.nowamagic.net/librarys/veda/detail/1286

贪睡猫仙mosen
粉丝 2
博文 30
码字总数 6551
作品 0
松江
个人站长
私信 提问
PHP内核探索:zend_execute的具体执行过程

PHP内核探索:zend_execute的具体执行过程 解释器引擎最终执行op的函数是zendexecute,实际上zendexecute是一个函数指针,在引擎初始化的时候zendexecute默认指向了execute,这个execute定义在...

开元中国2015
2015/06/19
72
0
php的生命周期

1、PHP的运行模式: PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。 1、当我们在终端敲入php这个命令的时候,它使用的是CLI。 它就像一个web...

stone_
2016/10/21
79
0
深入理解php底层:php生命周期

1、PHP的运行模式: PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。 1、当我们在终端敲入php这个命令的时候,它使用的是CLI。 它就像一个web...

执杖天涯
02/28
38
0
PHP内核探索:Zend虚拟机

通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程: 递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。 ...

旋转木马-千里马
2016/01/21
66
0
PHP内核探索:一次请求生命周期

深入探讨 真正的内部运行过程没有这么简单。以上过程只是个简略版,让我们再深入挖掘一下,看看幕后还发生了些什么。 Apache启动后,PHP解释程序也随之启动。PHP的启动过程有两步: 第一步是...

贪睡猫仙mosen
2014/02/18
125
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
16
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
12
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部