SetEnvした環境変数はr->subprocess_env
という変数に保存されています。
設定ファイルでSetEnvしたものをApache Module内から取得する
httpd.conf に下記のように書いて
SetEnv MY_NAME DQNEO
<Location "/mymodule">
SetEnv MY_FRIEND pikachu
SetHandler mymodule
</Location>
module内で
char *myname = apr_table_get(r->subprocess_env, "MY_NAME");
char *myfriend = apr_table_get(r->subprocess_env, "MY_FRIEND");
で取得できます。
しかしこの方法で取得できるのは、あくまでSetEnvしたものだけです。
(なんでこうなってるのかわかりませんが、おそらくセキュリティ上の理由でしょうか...?)
SetEnvじゃない環境変数を取得したい場合
QUERY_STRINGなどを取得したい場合
事前にap_add_cgi_vars(r);
を呼びましょう。
ap_add_cgi_vars(r);
char *query_string = apr_table_get(r->subprocess_env, "QUERY_STRING")
PATHなどを取得したい場合
事前にap_add_common_vars(r);
を呼びましょう。
ap_add_common_vars(r);
apr_table_get(r->subprocess_env, "PATH");
取得可能な環境変数を全部見たいとき
こうすれば全項目を走査して表示できます。
const apr_array_header_t *arr_env = apr_table_elts(r->subprocess_env);
int i;
for (i = 0; i < arr_env->nelts; i++) {
apr_table_entry_t *entry = (apr_table_entry_t *)(arr_env->elts + (arr_env->elt_size * i));
ap_rprintf(r, "key=%s , value=%s\n", entry->key, entry->val);
}
参考
当初、環境変数を取得する方法が皆目わからず泣きそうになっていたら下記記事を見つけて答えにたどりつきました。