【问题标题】:Is there a way to determine the loading order of apache modules有没有办法确定apache模块的加载顺序
【发布时间】:2012-04-24 14:39:36
【问题描述】:

我正在开发一个基于 Apache 的应用程序,其中包含几个自定义模块。

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

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

提前致谢。

【问题讨论】:

  • 我认为(但我不确定,所以不要将其视为权威)模块是按照LoadModule 指令出现在配置文件中的顺序加载的。如果GetModuleHandle 失败并记录顺序很重要这一事实,您可能应该只是失败并出现错误。

标签: c apache apache-modules


【解决方案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”在我们之前运行,那么我们将挂钩如下.. ." [示例如下]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多