[Up] [Next] [Previous]

CGIスクリプトの例

ここではWWWで行う簡単な電子掲示板を作ってみます。入力フォームと掲示物 を表示するためのCGIスクリプトの二つを作ります。まず、入力フォーム部は <FORM>タグを使用して作成します。そして、CGIスクリプトで はメッセージの投稿によって、ファイルに書き込むと同時に新しいメッセージ 加えて電子掲示板を表示します(日本語未対応)。


電子掲示板の例

#!/usr/bin/perl

$boardfile = "/tmp/board";

print "Content-type: text/html\n\n";


# POSTが実行(Submit)された場合にメッセージをファイルに記入します。
# CGIスクリプトが呼び出されただけの場合は、電子掲示板を表示するだけ
# です。

if ($ENV{'REQUEST_METHOD'} eq "POST") {

    %form = &read_input;

    $your_name = $form{'from'};
    $your_message = $form{'message'};

    open(BD, ">>$boardfile") || die "not board file";

    print(BD "<hr>\n");
    print(BD "<i>$your_name</i><br>\n");
    print(BD "$your_message\n");
    print(BD "\n");

    close(BD);

    &create_page;
}
else {
    &create_page;
}


# ページ作成のサブルーチン

sub create_page
{
    print "<head>\n";
    print "<title>Electoric Board for WWW</title>\n";
    print "</head>\n";
    print "<body>\n";
    print "<h2>Electoric Board for WWW</h2>\n";
    print "\n";
    print "<hr>\n";
    print "\n";
    print "<form method=\"POST\" action=\"/cgi-bin/chat.cgi\">\n";
    print "Your name: <input name=\"from\"><p>\n";
    print "Your message:<p>\n";
    print "<textarea rows=5 cols=60 name=\"message\"></textarea><p>\n";
    print "\n";
    print "<input type=\"submit\" value=\"Post a mesasge\"><p>\n";
    print "</form>\n";
    print "\n";
    print "\n";

# メッセージファイルの読み込みと表示を行います。

    open(BOARD, "$boardfile") || die "not board file";
    while(<BOARD>) {
	print ;
    }
    close(BOARD);

    print "\n";
    print "</body>\n";

}

sub read_input
{
    local ($buffer, @pairs, $pair, $name, $value, %FORM);
    # Read in text
    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
    if ($ENV{'REQUEST_METHOD'} eq "POST")
    {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    } else
    {
	$buffer = $ENV{'QUERY_STRING'};
    }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs)
    {
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%(..)/pack("C", hex($1))/eg;
	$FORM{$name} = $value;
    }
    %FORM;
}

電子掲示板のデモ

これよりも非常に高機能な HyperNews と呼ばれるWWWを利用した電子掲示板ツールもあります。


[Up] [Next] [Previous]