5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apache Module内で環境変数を取得する方法

Last updated at Posted at 2014-11-12

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);
}

参考

当初、環境変数を取得する方法が皆目わからず泣きそうになっていたら下記記事を見つけて答えにたどりつきました。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?