LY’Blog~~blog.ly5.org~~ Rotating Header Image

[转]自己动手用 C 扩展 PHP(三)- 重要ZEND API函数

作者: 黄浩
网名: black_key or ROOT1
mail: kkk139@126.com
转自: 开发者俱乐部 http://www.dev-club.com

引言:
   有感于大多数人认为 PHP 只是一种弱类型,只能做小型web应用的脚本语言。 与目前的Java, .Net平台有一定的差距,所以决定写一些 PHP 的扩展方法文章,我相信
我们PHPER们通过自己动手写商业扩展,一定能构建出强大的,极速的Web应用,因为扩展本身就是编译型语言编写的(c/c++),而且可以
预先驻留内存的(Apache启动时加载),有了 C/C++ 编写的扩展,我们几乎可以无所不能.
   呵呵,Zend 的说明文档少之又少,真令人头疼 :)

-----------------------------------------------------------

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

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

-------------------------------------------------
下章再介绍 php.ini 的配置设定及读取

待续 …

0 Comments on “[转]自己动手用 C 扩展 PHP(三)- 重要ZEND API函数”

Leave a Comment

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word