您的位置:首页 > 编程语言 > PHP开发

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

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

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程序建立扩展模块代码框架的时候都自动化帮你实现了这些结构,依照说明填充需要的代码即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: