如何以编程方式获取模块内的 apache2.conf 文件目录或路径?

How to programmatically obtain the apache2.conf file directory or path inside a module?

我有一个挂钩 ap_hook_child_init 的模块。从该回调中,我想获取主 apache2.conf 文件所在的目录(或该文件的完整路径,我将解析出该目录)。

该回调采用 server_rec 结构和 apr_poot_t 结构。 server_rec 有一个 path 成员,但它是空的。

你不能直接找到这个,当然"apache2.conf"可能根本不存在。这个文件是 debian-ism.

但是,您有一个选择是:

  • 找到一个通常出现在这个配置文件中的指令或任何你想要相同对待的替代品
  • 使用与核心模块相同的定义将指令添加到您的模块
  • 当您在处理指令的回调中获得控制权时,查看 cmd->directive->fname 并将路径保存在全局变量中。

多个模块可以共享相同的指令名称,它们都会被调用来处理它。

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <linux/limits.h>
#include <libgen.h>

void getJsonConfigPath(char *path, int pathLen)
{
    char dir[PATH_MAX] = {0};
    int n = readlink("/proc/self/exe", dir, PATH_MAX);
    char *dname = dirname(dir);
    if (strlen(dname) < pathLen) {
        strcpy(path, dname);
        int pathLen = strlen(path);
        if (path[pathLen-1] == '/') {
            strcat(path, "config.json");
        } else {
            strcat(path, "/config.json");
        }
    } else {
        printf("dname too long: %d\n", strlen(dname));
    }
}

int main() {
    char path[PATH_MAX] = {0};
    getJsonConfigPath(path, sizeof(path));
    printf("path: %s\n", path);
 
    return 0;
}

你可以在你的apache模块中使用函数getJsonConfigPath,这个函数可以return你可以使用的配置路径