フリーの検索エンジン フォームとCGI目次 GIFs on the Fly

CGIスクリプトの例

ここではWWWで行う簡単な電子掲示板を作ってみます。入力フォームと掲示物を表示するためのCGIスクリプトの2つを作成します。まず、入力フォーム部は<form>タグを使用し、CGIスクリプトではメッセージが投稿されるとファイルへ書き込むと同時に新しいメッセージを加え、電子掲示板を表示します。

	
	
	#!/usr/bin/perl
	
	$boardfile = "chat.dat";
	
	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 Sample</title>\n";
	    print "</head>\n";
	    print "<body>\n";
	    print "<blockquote><font size=2>\n";
	    print "<h3>Yokochin's Electoric Board</h3>\n";
	    print "\n";
	    print "<hr>\n";
	    print "\n";
	    print "<form method=\"post\" action=\"/cgi-bin/chat.cgi\">\n";
	    print "お名前: <input name=\"from\"><p>\n";
	    print "メッセージ:<p>\n";
	    print "<textarea rows=5 cols=60 name=\"message\"></textarea><p>\n";
	    print "\n";
	    print "<input type=\"submit\" value=\"メッセージを送る\"><p>\n";
	    print "</form>\n";
	    print "\n";
	    print "</font></blockquote>\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を利用した電子掲示板ツールもあります。



Copyright (C) 1996-2003 by Yasukazu Yokoi. All Rights Reserved.