文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>apache模块基本架构

apache模块基本架构

时间:2010-04-13  来源:reesun

本文是对Apache模块结构的基本说明,为了更好的诠释Apache模块的架构,这里有一个helloworld模块,其超链接为:helloworld模块。
对于每个Apache模块,都会分为三大部分:
一、模块的声明,每个Apache模块都会输出一个数据结构。如下所示:

module AP_MODULE_DECLARE_DATA <module_name>_module = {
    STANDARD20_MODULE_STUFF,
    dir_cfg,           //创建目录配置结构
    dir_merge,         //合并目录配置结构
    svr_cfg,         //创建主机配置结构
    svr_merge,         //合并主机配置结构
    cmds,         //为模块配置相关指令
    <regist_name>_hooks         //注册模块的钩子程序
};

在helloworld模块中,这个数据结构是这样定义的:

module AP_MODULE_DECLARE_DATA helloworld_module = {
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    helloworld_hooks
};


二、注册模块的钩子程序。

static void <regist_name>_hooks(apr_pool_t *pool)
{
    ap_hook_handler(<module_name>_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

在helloworld模块中,钩子是这样定义的:

static void helloworld_hooks(apr_pool_t *pool)
{
    ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}


三、处理器代码,即在注册模块的钩子程序中调用的“<module_name>_handler”程序。在helloworld模块中,处理程序是这样的:

static int helloworld_handler(request_rec *r)
{
    if (!r->handler || strcmp(r->handler, "helloworld")) {
        return DECLINED;
    }

    if (r->method_number != M_GET) {
        return HTTP_METHOD_NOT_ALLOWED;
    }
    ap_set_content_type(r, "text/html;charset=ascii");
    ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n", r);
    ap_rputs("<html><head><title>Hello Apache Module</title></head>", r);
    ap_rputs("<body><h1>Hello Apache Module</h1>", r);
    ap_rputs("</body></html>", r);
    return OK;
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载