Cookbook > Apache_api

あるモジュールが組み込まれているか調べる

By Hiroyuki OYAMA Thu Aug 21 00:45:07 2003

特定のモジュールの機能に依存していたり、他のモジュールの設定値を参照したい場合は、対象のモジュールがApacheにロードされているかをチェックする必要がある。

名前を指定して調べる

特定のモジュールが組み込まれているか否かを調べる場合、関数ap_find_linked_module()にモジュールのファイル名("mod_example.c"など)を与えて調べる事ができる。
module *linked_module;

linked_module = ap_find_linked_module("mod_auth.c");
if (linked_module == NULL) {
    /* "mod_auth.c"は組み込まれていない */
}
関数ap_find_linked_module()はhttp_core.cモジュールのIfModuleコンテナの実装や、mod_rewrite.cモジュールでProxyを利用する際にmod_proxy.cモジュールが組み込まれているか否かのチェックなどに利用されている。
実装については $APACHE_SRC/main/http_config.c を参照してください。

組み込み済みモジュールの一覧を得る

モジュール名を直接指定して存在するか否かは判るとして、「今現在Apacheに組み込まれているモジュールの一覧が欲しい」なんてときはどうするか。その場合は組み込み済みモジュールのリンクリストの先頭を指しているApacheのグローバル変数top_moduleを参照します。
extern module *top_module;
module *m;

for (m = top_module; m; m = m->next) {
    char *module_name;
    /* ap_find_module_nameはmodule構造体のポインタから、 */
	/* モジュール名を取り出す。                          */
    module_name = ap_find_module_name(m);
}
module構造体ポインタのグローバル変数top_moduleは、LoadModuleやAddModuleディレクティブで最後に追加されたモジュールをポイントし、そのリンクリストの終端は http_core.cモジュールを指しています。
関数ap_find_module_name()は引数で与えたmodule構造体ポインタが保持しているモジュール名を返す関数ですが、この実装は単純にmodule構造体のnameフィールドを参照しているだけです。
これだけ見てると
httpd -l で組み込み済みモジュール一覧でるじゃん
とか言われそうな気もしますが、その場合出力されるのはスタティックリンクされたモジュールだけで、ダイナミックリンクされたモジュールはhttpd.confを見ないとわかりません。稼働中のApacheに組み込まれているモジュール一覧を出力する管理用Web I/Fとか色々使えると思います。

Comments

Post a comment

Name:


URL:


Comments:


WebエンジニアのためのApacheモジュールプログラミングガイド

ApacheをHackする!
モジュールプログラミング強烈初体験!!
定価: 2,919円(税込)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Cookbook > Apache_api > あるモジュールが組み込まれているか調べる