KAME-Board Programmer's Manual

データの流れ

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