重要ZEND API函数

发布人:zicky  时间:2007-11-29 23:02  来源: Php Question  查看: 258次
在上两章里讲述了扩展模块的基本用法,相信读者已经能够构建自己的扩展模块了,接下来,我们来看看几个重要的函数:


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