自己动手用C扩展PHP(三)

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

 

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程序建立扩展模块代码框架的时候都自动化帮你实现了这些结构,依照说明填充需要的代码即可。

原文链接: https://www.cnblogs.com/moodlxs/archive/2011/09/21/2345382.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    自己动手用C扩展PHP(三)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/390677

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月30日 下午3:55
下一篇 2023年3月30日 下午3:55

相关推荐