自己动手用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程序建立擴展模塊代碼框架的時候都自動化幫你實現了這些結構,依照說明填充需要的代碼即可。
來源:http://www.cnblogs.com/moodlxs/archive/2011/09/21/2345382.html
總結
以上是生活随笔為你收集整理的自己动手用C扩展PHP(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache启动过程(PHP_MINIT
- 下一篇: PHP源码分析-PHP的生命周期