|
データの流れ
- $DATA_DIR/syslib のシステムライブラリをロードする。
- アクセスログを STDERR に書き込む。
- $ENV{'PATH_INFO'} を正規化する。
- $ENV{'PATH_INFO'} をパースする。(pathinfo_parse)
この段階で、次の変数がセットされます。
- $SKEL->{'_PATH_INFO'} = $ENV{'PATH_INFO'};
- $PARAM->{'_CMD'};
- $PARAM->{'_FILE'};
- $PARAM->{'_SCHEME'};
- $PARAM->{'_ARTICLE_ID'};(_CMD が show_article の時のみ)
- $PARAM->{'_SCHEME'}を検査します。(scheme_ok)
scheme に対応するディレクトリが実在するかを調べ、
NG なら not_found.html を表示して終了します。
- $ENV{'HTTP_COOKIE'}をパースします。(cookie_parse)
- 入手した cookie は $GET_COOKIE->{}に入ります。
- KAME-Board は $GET_COOKIE->{'KAME'} という名前の cookie (ドメ
イン=KAME-Board が動作しているホスト、パス=kameboard.cgi 以下)を
使います。
- cookie を使ってユーザ認証します。(auth_user)
- $GET_COOKIE->{'KAME'}が 「ユーザ名:セッションキー」なので、
ユーザ毎に保存されている前回の、セッションキー、キー有効期限、リ
モートアドレスを調べ、OKなら 1 を、NGなら 0 を返す。
OK なら次の変数をセットする。
- $SCHEME->{'_USER'}->{'user_name'};
- $SKEL->{'_USER_HANDLE'};
- $SKEL->{'_USER_NAME'};
- scheme 毎の設定をロードする。(scheme_config_load)
- $SCHEME->{'_SCHEME'}->{'scheme'}=$PARAM->{'_SCHEME'};
- 上から順に config/config.db1, config/mime.types,
config/skel.db1 をロードする。
- config.db1 のロード(_scheme_config_load)
db1 形式で、次の変数にセットする。その scheme で使う定数の
セットに使う
$SCHEME->{'_CONFIG'}->{*}
- mime.types のロード(_scheme_config_load_mime)
mime.types 形式で、次の変数にセットする。show__file で返す
ときの Content-type を判断するために使う。
$SCHEME->{'_MIME_TYPE'}->{*}
- skel.db1 のロード(_scheme_config_load_skel)
db1 形式で、$SKEL->{*}をセットする。
- 上から順に lib/*.pl ロードする(_scheme_config_require)。
- $SCHEME->{'_SCHEME'}->{'scheme_dir'} をセットする。
- CGI入力をパースする(parse_input)。
- $SCHEME->{'_CONFIG'}->{'size_limit'}(byte 単位)があれば、制限に
従う。
- 入力のフォーム変数を、$PARAM->{*}にセットする。
- 入力データは、jcode.pl を使って EUC に変換される。
- ファイルアップロードの場合、フォーム名 XXX に対して、ファイルのデータが $PARAM->{'XXX'} に、ファイル名が $PARAM->{'XXX__file'} に、Content-type: が $PARAM->{'XXX__ct'} に入る。
- $PARAM->{*}の内容を$SKEL->{*}にコピーする(parse_copy_to_skel)。
- いくつかのシステム $SKEL 変数をセットする。
- $PARAM->{'_CMD'}の内容にしたがって、$CMD_DISPATCH{}を実行する。
- 対応する、$CMD_DISPATCH{}が無い場合は show_not_found する。
- ユーザがログインしているときで、$PARAM->{'_CMD'} が show__file や
show_article_file で無いとき(つまり、メインファイルの表示の時)は、
新しい cookie をセットする(auth_set_cookie)。
|