<-
Apache HTTP 服务器 2.4 > 将模块从1.3转换为2.x

将模块从Apache 1.3转换为Apache 2.0

这是第一次尝试编写将mod_mmap_static模块转换为Apache 2.0 时所学的课程。这绝不是确定的,在某些方面甚至可能都不正确,但这只是一个开始。

支持Apache!

也可以看看

最佳

更容易的改变...

清理程序

这些现在必须是类型,apr_status_t并返回该类型的值。通常,APR_SUCCESS除非有必要发信号通知清理错误,否则返回值将是 。请注意,即使您发出错误信号,也并非所有代码都会检查错误并采取措施。

初始化程序

现在应将其重命名,以更好地表明它们在整个过程中所处的位置。因此,名称从更改 mmap_initmmap_post_config。通过的论点发生了根本变化,现在看起来像

资料类型

许多数据类型已移至APR中。这意味着某些名称已更改,例如上面显示的名称。以下是您可能需要进行的一些更改的简要列表。

最佳

信使发生了变化...

注册钩子

新的体系结构使用一系列挂钩来调用您的函数。您需要通过新功能将这些添加到模块中static void register_hooks(void)。一旦您了解需要完成的功能,该功能实际上就相当简单。在请求处理的某个阶段需要调用的每个函数都需要注册,而处理程序则不需要。可以在多个阶段添加函数,对于每个阶段,您都可以高度控制地指定将调用函数的相对顺序。

这是添加到的代码mod_mmap_static

static void register_hooks(void)
{
    static const char * const aszPre[]={ "http_core.c",NULL };
    ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
    ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
};

这注册了两个需要调用的函数,一个在post_config阶段(实际上每个模块都需要这个),另一个在translate_name阶段。请注意,尽管函数名称不同,但每个函数的格式是相同的。那是什么格式?

ap_hook_phase_name(function_name, predecessors, successors, position);

定义了3个挂钩位置...

要定义位置,请使用该位置,然后使用前任和后继进行修改。每个修饰符都可以是应该运行的函数的列表,可以在函数运行之前(前继)或在函数运行之后(后继)。

在这种mod_mmap_static情况下,我不在乎 post_config阶段,但是mmap_static_xlat 必须在核心模块完成名称转换后调用,因此必须使用aszPre来为position定义修饰符HOOK_LAST

模块定义

现在,在创建模块定义时无需担心很多步骤。旧的定义看起来像

module MODULE_VAR_EXPORT module_name_module =
{
    STANDARD_MODULE_STUFF,
    /* initializer */
    /* dir config creater */
    /* dir merger --- default is to override */
    /* server config */
    /* merge server config */
    /* command handlers */
    /* handlers */
    /* filename translation */
    /* check_user_id */
    /* check auth */
    /* check access */
    /* type_checker */
    /* fixups */
    /* logger */
    /* header parser */
    /* child_init */
    /* child_exit */
    /* post read-request */
};

新的结构要简单得多。

module MODULE_VAR_EXPORT module_name_module =
{
    STANDARD20_MODULE_STUFF,
    /* create per-directory config structures */
    /* merge per-directory config structures  */
    /* create per-server config structures    */
    /* merge per-server config structures     */
    /* command handlers */
    /* handlers */
    /* register hooks */
};

其中有些直接读懂,有些则不然。我将尝试总结下面应该做的事情。

直接读取的阶段:

/* dir config creater */
/* create per-directory config structures */
/* server config */
/* create per-server config structures */
/* dir merger */
/* merge per-directory config structures */
/* merge server config */
/* merge per-server config structures */
/* command table */
/* command apr_table_t */
/* handlers */
/* handlers */

其余的旧功能应注册为钩子。到目前为止,定义了以下钩子阶段...

ap_hook_pre_config
在处理配置指令之前进行任何所需的设置
ap_hook_check_config
查看配置指令的相互依赖性
ap_hook_test_config
仅与-t选项一起执行
ap_hook_open_logs
打开任何指定的日志
ap_hook_post_config
这是旧_init程序注册的地方
ap_hook_http_method
从请求中检索http方法。(遗产)
ap_hook_auth_checker
检查资源是否需要授权
ap_hook_access_checker
检查特定于模块的限制
ap_hook_check_user_id
检查用户名和密码
ap_hook_default_port
检索服务器的默认端口
ap_hook_pre_connection
在处理之前但在接受之后进行所需的任何设置
ap_hook_process_connection
运行正确的协议
ap_hook_child_init
孩子刚开始就打电话
ap_hook_create_request
??
ap_hook_fixups
在生成内容之前修改内容的最后机会
ap_hook_handler
产生内容
ap_hook_header_parser
让模块查看大多数模块不使用的标题,因为它们post_read_request用于此
ap_hook_insert_filter
将过滤器插入过滤器链
ap_hook_log_transaction
记录有关请求的信息
ap_hook_optional_fn_retrieve
检索注册为可选的任何功能
ap_hook_post_read_request
在读取请求之后,在任何其他阶段之前调用
ap_hook_quick_handler
在任何请求处理之前调用,由缓存模块使用。
ap_hook_translate_name
将URI转换为文件名
ap_hook_type_checker
确定和/或设置文档类型

可用语言: zh  |  ja 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。