在上两章里讲述了扩展模块的基本用法,相信读者已经能够构建自己的扩展模块了,接下来,我们来看看几个重要的函数:

1、PHP_MINIT_FUNCTION(MyModule);

当模块被Zend Engine(ZE)加载后,例如Apache启动,加载了PHP模块,ZE会对每一个扩展模块调用此函数(如果有的话),可以在该函数里进行一些初始化操作。

2、PHP_RINIT_FUNCTION(MyModule);

对于每一个“使用”该模块的PHP脚本请求前,都执行该函数(如果有的话),最好的例子:Session扩展模块,如果在一个PHP脚本里执行session.start(),Session模块的PHP_RINIT_FUNCTION()将被调用。详情可以看看session模块的源代码。

3、PHP_RSHUTDOWN_FUNCTION(MyModule);

与PHP_RINIT_FUNCTION()相反,该函数是在一个PHP脚本执行完毕后执行。

4、PHP_MSHUTDOWN_FUNCTION(MyModule);

当ZE收到shutdown信号后,例如apache卸载PHP模块,ZE对每一个模块调用此函数,最后关闭自己的核心子系统。

---------------------------------------------

如何使用以上的函数?

首先,在头文件("mymodule.h")里声明:

PHP_MINIT_FUNCTION(MyModule);
PHP_MSHUTDOWN_FUNCTION(MyModule);
PHP_RINIT_FUNCTION(MyModule);
PHP_RSHUTDOWN_FUNCTION(MyModule);

然后在你的“mymodule.c”里实现zend_module_entry结构:

zend_module_entry MyModule_module_entry = {
    #if ZEND_MODULE_API_NO >= 20010901
        STANDARD_MODULE_HEADER,
    #endif

"MyModule",
    MyModule_functions,
    PHP_MINIT(MyModule),
    PHP_MSHUTDOWN(MyModule),
    PHP_RINIT(MyModule),
    PHP_RSHUTDOWN(MyModule),
    NULL,

#if ZEND_MODULE_API_NO >= 20010901
        "0.1",
    #endif

STANDARD_MODULE_PROPERTIES
};

// 实现 PHP_MINIT_FUNCTION() 等等 ...
PHP_MINIT_FUNCTION(MyModule)
{
    // 你的实现代码 ...
    return SUCCESS;
}

其实ext目录下的ext_skel程序建立扩展模块代码框架的时候都自动化帮你实现了这些结构,依照说明填充需要的代码即可。

来源:http://www.cnblogs.com/moodlxs/archive/2011/09/21/2345382.html

自己动手用C扩展PHP(三)相关推荐

  1. 动手学强化学习(三):动态规划算法 (Dynamic Programming)

    动手学强化学习(三):动态规划算法 (Dynamic Programming) 1. 简介 2. 悬崖漫步环境 3. 策略迭代算法 3.1 策略评估 3.2 策略提升 3.3 策略迭代算法 4.价值迭 ...

  2. 关系型数据库横向扩展的三种方法

    本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, Scalability, and Availability Objectives,第二节: ...

  3. 「雕爷学编程」Arduino动手做(34)——三色LED交通灯模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  4. 【php7扩展开发三】ini配置

    php.ini配置 php.ini是PHP主要的配置文件,解析时PHP将在这些地方依次查找该文件:当前工作目录.环境变量PHPRC指定目录.编译时指定的路径,在命令行模式下,php.ini的查找路径可 ...

  5. 服务器jbod扩展_三分钟了解服务器关键技术——RAID

    RAID,为Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列. RAID 技术作为高性能.高可靠的存储技术,已经得到了非常广泛的应用. RAID ...

  6. ES6——扩展运算符/三点运算符(...)

    扩展运算符(spread)是三个点(...). 数组的扩展运算符 对于数组来说,它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) ...

  7. 第十章:XAML标记扩展(三)

    资源词典 Xamarin.Forms还支持第二种共享对象和值的方法,虽然这种方法比x:静态标记扩展稍微有点开销,但它更通用 - 因为所有东西 - 共享对象和使用的可视元素 它们 - 可以用XAML表示 ...

  8. 动手学深度学习(三十九)——门控循环单元GRU

    文章目录 门控循环单元(GRU) 一.门控隐藏状态 1.1 重置门和更新门 1.2候选隐藏状态 1.3 隐藏状态 二.从零实现GRU 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 2. ...

  9. Arduino动手做(48)---三轴ADXL345模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

最新文章

  1. python动态规划详解_经典动态规划例题整理(Python版)
  2. Android自定义控件之仿汽车之家下拉刷新
  3. Vue全家桶实战03_【从入门到放弃系列】
  4. 为什么整数在python中表示d_python中整数的缓存机制
  5. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
  6. 在大公司天天调参数,感觉快废了
  7. 小程序加载更多-数据的拼接
  8. PHP高并发场景的三种解决方案
  9. Oracle ORA-00955名称已由现有对象使用
  10. swing的maven项目打成jar包
  11. 862772-11-0,c(RGDfC),cyclo(RGDfC),cyclo(RGD-DPhe-C),cyclo (Arg-Gly-Asp-D-Phe-Cys)
  12. 【open stack】openstack从入门到放弃
  13. 人工智能全栈学习路线之人工智能概览(百度云智学院学习笔记)
  14. k-近邻算法 From Machine Learning
  15. Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取
  16. 阿里mPaas中扫一扫功能的接入
  17. 中国劳动关系学院计算机专业分数,中国劳动关系学院是几本?录取分数线是多少?...
  18. [附源码]Nodejs计算机毕业设计基于图书管理系统Express(程序+LW)
  19. jQuery斑马条纹表
  20. 7.3 Qt图形程序设计 【C++】

热门文章

  1. matlab求解复数方程组,【求解】matlab求解非齐次方程组,但是系数矩阵是复数,求帮忙...
  2. CSS中让一个div的高度随着另外个一个统计的div的高度变化而变化的代码
  3. 2.QT中使用资源文件,程序打包
  4. 【源码】java中图片和Base64互相转换源码
  5. Oracle_Net_Configuration_Assistant_配置步骤
  6. python数组排序奇数在前偶数在后_数组排列(奇数在前,偶数在后)
  7. include/caffe/common.cuh(9): error: function atomicAdd(double *, double) has already been defined
  8. Faster RCNN总结
  9. Caffe-SSD(single-shot-multibox)在Windows平台下的配置(CPU和GPU)与训练记录
  10. (一)面试题:TCP三次握手