php扩展开发(二 一个程序的生命周期)

一个PHP实例一定会经过Module init  , Request init,Request shutdown ,Module shutdown四个阶段

两种init和两种shutdown各会执行多少次,取决于php使用什么sapi与宿主通信,最常见的四种方式是:

1)直接以CLi/CGI模式调用

2)多进程模块

3)多线程模块

4)Embedded(嵌入式,在自己的C程序中调用Zend Engine)

SAPI(Server abstraction API,服务抽象化程序接口)提供一个接口,使得PHP可以和其它的应用程序进行交互,也就是说php能和其它程序如apache等交互就是这个接口在起作用


在命令模式下运行一个php程序的主要流程如下:

以请求test.php为例:

php -f test.php -->  call each extension's minit --> request test.php  --> call each extension's rinit  -->  execute test.php  -->  call each extension's rshutdown -->  finish cleaning up after test.php  --> call each extension's mshutdown -->  tesminate  php

我们在命令行敲入:php -f test.php 时,发生过过程大概如下:

1)call each extension's minit 这个过程在函数被载入时调用,一般写在扩展的以下函数里:

   PHP_MINIT_FUNCTION(myext){

       //注册常量或者类的初始化等操作

      return  success;

   }

2)request  test.php

     请求test.php文件,当请求到达后php会初始化脚本执行的环境,比如创建一个执行环境,包括保存PHP运行过程中需要的变量名称和变量值内容的符号表,以及当前所有的函数及类等信息的符号表,然后PHP会调用所有模块的rinit函数,在这个阶段各个模块也执行以下相关的操作,模块的rinit和minit类似

   PHP_RINIT_FUNCTION(myext){

       /*例如记录请求开始时间*/

      return  success;

   }

3)execute test.php

执行test.php 主要是把PHP文件编译成opcodes,然后在PHP虚拟机下执行

4)call each  extension's  rshutdown

请求处理完进入结束阶段,如执行到脚本结尾或者遇到exit  die,和请求开始类似,结束也分为rshutdown和mshutdown两个阶段

PHP_RSHUTDOWN_FUNCTION(myext){

       /*例如记录请求结束时间*/

      return  success;

   }

PHP_MSHUTDOWN_FUNCTION(myext){

       /*注销一些持久化资源*/

      return  success;

   }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值