久しぶりにmod_perlプログラミング (2)

  • 投稿日:
  • by
  • カテゴリ:

前回の続き。

とりあえず、mod_perl2のハンドラは何があるのか調べる。

mod_perl:HTTP handlersによると、


  1. PerlPostReadRequestHandler (PerlInitHandler)
  2. PerlTransHandler
  3. PerlMapToStorageHandler
  4. PerlHeaderParserHandler (PerlInitHandler)
  5. PerlAccessHandler
  6. PerlAuthenHandler
  7. PerlAuthzHandler
  8. PerlTypeHandler
  9. PerlFixupHandler
  10. PerlResponseHandler
  11. PerlLogHandler
  12. PerlCleanupHandler

という感じらしい。番号は呼ばれる順番ね。ふむふむ。
じゃぁ本当にそんな順番で呼ばれるのか確かめてみよう。

httpd.confに以下のように記述。

PerlSwitches -I/usr/local/apache2/site_perl

PerlPostReadRequestHandler Apache::PostReadRequest
PerlTransHandler Apache::Trans
PerlMapToStorageHandler Apache::MapToStorage
PerlHeaderParserHandler Apache::HeaderParser
PerlInitHandler Apache::Init
PerlAccessHandler Apache::Access
PerlAuthenHandler Apache::Authen
PerlAuthzHandler Apache::Authz
PerlTypeHandler Apache::Type
PerlFixupHandler Apache::Fixup
PerlResponseHandler Apache::Response
PerlLogHandler Apache::Log
PerlCleanupHandler Apache::Cleanup

で、/usr/local/apache2/site_perl/Apache/PostReadRequest.pmを以下のように。

package Apache::PostReadRequest;

use strict;
use Apache2::Const -compile => qw(OK DECLINED);

sub handler {
    warn __PACKAGE__;
    return Apache2::Const::DECLINED;
}

1;

Apache2::Const::DECLINEDを指定しているのは次のハンドラにまわすため。

他のpmファイルも同様にしてApacheの再起動してアクセスすると、エラーログには

Apache::PostReadRequest
Apache::Init
Apache::Trans
Apache::MapToStorage
Apache::HeaderParser
Apache::Access
Apache::Type
Apache::Fixup
Apache::Log
Apache::Cleanup

という順番でモジュール名が残されていました。

BASIC認証書けてないからAuthenとAuthzが無いのは問題ないとして、Apache::Responseが表示されないのはなぜだろう。よくわかんね。

とりあえず、順番は確かめられたので、次はリファラ次第で処理を分けるようにしてみる。
これってPerlTransHandlerかな。