さて、今回はCGIを利用して簡単な「おみくじ」を作ってみます。
左の図で、「占う」ボタンを押すと・・・
「大吉」「吉」「小吉」「凶」「大凶」のいずれかが表示されます。
これらの出る確率は皆同じです。
では、呼び出し側のHTMLを見てみましょう。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>おみくじ</TITLE> </HEAD> <BODY> <CENTER> 下のボタンを押すと本日の運勢を占うことができます <FORM METHOD="GET" ACTION="kuji01.cgi"> <INPUT TYPE="SUBMIT" VALUE="占う"> </FORM> </CENTER> </BODY> </HTML>別にどうということもないですね。
「占う」ボタンが押されたらkuji01.cgiが実行されます。
実際にはcgiのおけるディレクトリはxxxx/cgi-bin/などのように サーバーにより決まっています。
では、cgiプログラムを見てみましょう。
// kuji01.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    char kuji[5][8] = {"大吉", "小吉", "吉", "凶", "大凶"};
    char color[2][16] = {"#ff0000", "#000000"};
    int co, ku;
    srand((unsigned int)time(NULL));
    printf("Content-Type:text/html\n\n");
    printf("<HTML>\n<HEAD>\n<TITle>おみくじ</TITLE>\n</HEAD>\n<BODY>");
    ku = rand() % 5;
    if (ku == 4)
        co = 0;
    else
        co = 1;
    printf("<CENTER>\n");
    printf("<FONT SIZE=\"5\" COLOR=\"%s\">", color[co]);
    printf("あなたの運勢は%sです", kuji[ku]);
    printf("</FONT>\n");
    printf("<P><A HREF=\"index.html\">Back</A></P>");
    printf("</CENTER>\n");
    printf("</BODY>\n<HTML>\n");
    return 0;
}
標準出力に「Content-Type:text/html」と出力してその後改行を2回出力します。
後は、普通にHTMLを出力すればよいですね。このプログラムでは、大凶の時は赤字で表示するようにしてあります。
運勢により異なる画像を表示するようにするのもよいですね。また、各運勢が同じ確率で 出現するのではなく、大凶や大吉は滅多に出ないようにするにはどうしたらよいでしょうか。 改良してみてください。
Update Jan/04/2003 By Y.Kumei