自己动手用C扩展PHP(三)
在上兩章里講述了擴(kuò)展模塊的基本用法,相信讀者已經(jīng)能夠構(gòu)建自己的擴(kuò)展模塊了,接下來(lái),我們來(lái)看看幾個(gè)重要的函數(shù):
?
1、PHP_MINIT_FUNCTION(MyModule);
?
當(dāng)模塊被Zend Engine(ZE)加載后,例如Apache啟動(dòng),加載了PHP模塊,ZE會(huì)對(duì)每一個(gè)擴(kuò)展模塊調(diào)用此函數(shù)(如果有的話(huà)),可以在該函數(shù)里進(jìn)行一些初始化操作。
?
2、PHP_RINIT_FUNCTION(MyModule);
?
對(duì)于每一個(gè)“使用”該模塊的PHP腳本請(qǐng)求前,都執(zhí)行該函數(shù)(如果有的話(huà)),最好的例子:Session擴(kuò)展模塊,如果在一個(gè)PHP腳本里執(zhí)行session.start(),Session模塊的PHP_RINIT_FUNCTION()將被調(diào)用。詳情可以看看session模塊的源代碼。
?
3、PHP_RSHUTDOWN_FUNCTION(MyModule);
?
與PHP_RINIT_FUNCTION()相反,該函數(shù)是在一個(gè)PHP腳本執(zhí)行完畢后執(zhí)行。
?
4、PHP_MSHUTDOWN_FUNCTION(MyModule);
?
當(dāng)ZE收到shutdown信號(hào)后,例如apache卸載PHP模塊,ZE對(duì)每一個(gè)模塊調(diào)用此函數(shù),最后關(guān)閉自己的核心子系統(tǒng)。
?
---------------------------------------------
?
如何使用以上的函數(shù)?
?
首先,在頭文件("mymodule.h")里聲明:
?
PHP_MINIT_FUNCTION(MyModule);
PHP_MSHUTDOWN_FUNCTION(MyModule);
PHP_RINIT_FUNCTION(MyModule);
PHP_RSHUTDOWN_FUNCTION(MyModule);
?
然后在你的“mymodule.c”里實(shí)現(xiàn)zend_module_entry結(jié)構(gòu):
?
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
};
?
// 實(shí)現(xiàn) PHP_MINIT_FUNCTION() 等等 ...
PHP_MINIT_FUNCTION(MyModule)
{
????// 你的實(shí)現(xiàn)代碼 ...
????return SUCCESS;
}
其實(shí)ext目錄下的ext_skel程序建立擴(kuò)展模塊代碼框架的時(shí)候都自動(dòng)化幫你實(shí)現(xiàn)了這些結(jié)構(gòu),依照說(shuō)明填充需要的代碼即可。
來(lái)源:http://www.cnblogs.com/moodlxs/archive/2011/09/21/2345382.html
總結(jié)
以上是生活随笔為你收集整理的自己动手用C扩展PHP(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Apache启动过程(PHP_MINIT
- 下一篇: 社保转移后社保卡怎么办理 社保卡转移流程