Apache 服务器中的全局变量

use*_*810 5 c apache apache-modules

我正在用 C 编写一些 apache (2.2) 模块,而且我对它很陌生,所以我想知道:

我需要知道是否可以创建一个全局变量,该变量将在 apache 服务器开始运行时启动。

看,我需要有一个主机名列表(这将是“特权”),以便我收到的每个请求,我都需要检查主机名是否出现在列表中(以检查它是否是“特权”)。

所以列表应该是全局的(这样每个服务器实例都会有相同的列表实例),我需要在开始时初始化它。

如果可能的话,我该怎么做?

谢谢!

use*_*810 5

虽然不是一个完整的答案,但我确实设法找到了一种拥有全局变量的方法。

我将apr_pool_userdata_getapr_pool_userdata_set方法与进程的全局池(pconf 和池)一起使用。

For further reference:
http://apr.apache.org/docs/apr/0.9/group_apr_pools.html

Examples:

attach static global data to server process pool

char *data = "this is some data";
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", NULL, request->server->process->pool);
Run Code Online (Sandbox Code Playgroud)

attach malloced heap data to server process pool

char *data = strdup("this is some data");
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", (apr_status_t(*)(void *))free, request->server->process->pool);
Run Code Online (Sandbox Code Playgroud)

Now retrieve the global data:

char *data;
apr_pool_userdata_get ((void**)&data, "myglobaldata_key", request->server->process->pool);
if (data == NULL) {
    // data not set...
}
Run Code Online (Sandbox Code Playgroud)