有没有办法确定apache模块的加载顺序

时间:2012-04-24 14:39:36

标签: c apache apache-modules

我正在开发基于Apache的应用程序,因为很少有自定义模块。

我想在一个模块中与其他模块共享一些功能。 我需要在stratup阶段将它们连接在一起。 我想使用模块名称的GetModuleHandle + GetProcAddress(它将仅在Windows下运行) - 但只有在Apache服务器已经加载模块时才会成功。

有没有办法配置Apache模块的加载顺序。 我只需要控制我的模块 - 其他模块无关紧要。

提前感谢。

1 个答案:

答案 0 :(得分:1)

如果您尝试从模块源控制Apache挂钩调用顺序,则可以尝试使用APR_HOOK_FIRSTAPR_HOOK_MIDDLEAPR_HOOK_LAST。或者,您可以专门命名其他模块以强制执行排序约束。来自docs

  

...“有两种机制可以做到这一点。第一种相当粗略的方法允许我们大致指定钩子相对于其他模块的运行位置。最后一个参数控制它。有三个可能的值: APR_HOOK_FIRST,APR_HOOK_MIDDLE和APR_HOOK_LAST。

     

“使用任何特定值的所有模块可以相对于彼此以任何顺序运行,但是,当然,所有使用APR_HOOK_FIRST的模块将在APR_HOOK_MIDDLE之前运行,这些模块在APR_HOOK_LAST之前运行。模块在运行时不关心应该使用APR_HOOK_MIDDLE。这些值是间隔开的,这样像APR_HOOK_FIRST-2这样的位置可以比其他函数更早地挂钩。...

     

“另一种方法允许更精细的控制。当一个模块知道它必须在某些其他模块之前(或之后)运行时,它可以通过名称指定它们。第二个(第三个)参数是一个以NULL结尾的字符串数组由必须在当前模块之前(之后)运行的模块的名称组成。例如,假设我们想要“mod_xyz.c”和“mod_abc.c”在我们之前运行,那么我们将挂钩如下.. 。“[示例如下]