Perl CGI
$CREATE /11/29/2002 by Mie Suemitsu
$UPDATE /11/08/2004 by Mie Suemitsu
アクセスカウンタ
簡易掲示板
上段の hello ボタンをクリックすると “Hello World!” とブラウザに表示する
ボタンをクリックすると テキストボックスに入力した文字列を表示する
ボタンをクリックすると テキストボックスに入力した文字列を、自分宛にメール送信する
アクセスカウンタ
ファイルよりカウンタの値を読み+1加算してファイルを更新する
カウンタの値を表示する
#!/usr/bin/perl -w
$|=1;
$countfile = "count.txt";
open(COUNTER,"$countfile") or die "$countfile cannot open";
$count = <COUNTER>;
close COUNTER;
$count++;
open(COUNTER,">$countfile") or die "$countfile cannot open";
print COUNTER $count;
close COUNTER;
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>access counter</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "Hello CGI World!!<BR>\n";
print "こんにちは、CGI<BR>\n";
print "あなたは ";
print $count;
print " 人目のお客様です。";
print "</BODY>\n";
print "</HTML>\n";
簡易掲示板
未入力の検査と警告メッセージは JavaScript を使っています
実行には cgi-bin.pl が必要です
#!/usr/bin/perl -w
$|=1;
require "cgi-lib.pl";
print "Content-type: text/html\n\n";
print <<END;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
<META http-equiv="Content-Script-Type" content="text/javascript">
<TITLE>掲示板</TITLE>
<SCRIPT language="JavaScript">
<!--
function guestbook()
{
if(document.forma.shimei.value == "")
{
alert("お名前を入力してください");
return;
}
else if(document.forma.email.value == "")
{
alert("メールアドレスを入力してください");
return;
}
else if(document.forma.msg.value == "")
{
alert("メッセージを入力してください");
return;
}
else
{
document.forma.method = "post";
document.forma.action = "/cgi-bin/tech/guestbook.cgi";
document.forma.submit();
}
}
-->
</SCRIPT>
</HEAD>
<BODY onLoad="document.forma.shimei.focus()">
<FORM NAME="forma">
<CENTER><H1>掲示板</H1></CENTER>
<HR>
あなたのメッセージを記述してください。<BR><BR>
お名前 :<INPUT TYPE="text" NAME="shimei" STYLE=ime-mode:active><BR><BR>
メールアドレス:<INPUT TYPE="text" NAME="email" SIZE="40" STYLE=ime-mode:inactive><BR><BR>
メッセージ :<BR>
<TEXTAREA NAME="msg" COLS="40" ROWS="4" STYLE=ime-mode:active></TEXTAREA><BR><BR>
<INPUT TYPE="button" VALUE="送信" onClick="guestbook()"><INPUT TYPE="reset" VALUE="RESET">
</FORM>
<HR>
END
#### postされたデータを受け取る
&ReadParse(*form);
$v1 = $form{"shimei"};
$v2 = $form{"email"};
$v3 = $form{"msg"};
#### 正規表現 TEXTAREAの改行を空白に置換
$v3 =~ s/\n/ /g;
$v3 =~ s/\r//g;
$v3 =~ s/</</g;
$v3 =~ s/>/>/g;
$v2 =~ s/</</g;
$v2 =~ s/>/>/g;
$v1 =~ s/</</g;
$v1 =~ s/>/>/g;
#### タイムスタンプを取得
$time = localtime();
$guestbook = "guestbook.txt";
$workfile = "workfile.txt";
if(($v1 ne "") && ($v2 ne "") && ($v3 ne ""))
{
#### ファイルに書き込む
open(WFILEHANDLE,">$workfile") or die "$workfile オープン失敗";
open(FILEHANDLE,"$guestbook") or die "$guestbook オープン失敗";
print WFILEHANDLE "$v1,$v2,$v3,$time\n";
while(<FILEHANDLE>)
{
print WFILEHANDLE $_;
}
close FILEHANDLE;
close WFILEHANDLE;
open(WFILEHANDLE,"$workfile") or die "$workfile オープン失敗";
open(FILEHANDLE,">$guestbook") or die "$guestbook オープン失敗";
for($i;$i<8;$i++)
{
$line = <WFILEHANDLE>;
print FILEHANDLE $line;
}
close FILEHANDLE;
close WFILEHANDLE;
}
#### ページに表示する
open(FILEHANDLE,"$guestbook") or die "$guestbook オープン失敗";
#### 登録されたメッセージ全件表示する
#### 全件print
while(<FILEHANDLE>)
{
chop;
@v = split(/,/);
print "<TABLE BORDER>\n";
print "<TR><TD>お名前:$v[0]</TD><TD>メールアドレス:$v[1]</TD><TD>送信日時:$v[3]</TD></TR>\n";
print "<TR><TD COLSPAN='3'>メッセージ:<BR>$v[2]</TD></TR>\n";
print "</TABLE>\n<HR>\n";
}
#### 登録されたメッセージのうち新しいもの8件のみ表示する
#### 8件print
# for($i=0;$i<8;$i++)
# {
# $line = <FILEHANDLE>;
# chop;
# @v = split(/,/,$line);
# print "<TABLE BORDER>\n";
# print "<TR><TD>お名前:$v[0]</TD><TD>メールアドレス:$v[1]</TD><TD>送信日時:$v[3]</TD></TR>\n";
# print "<TR><TD COLSPAN='3'>メッセージ:<BR>$v[2]</TD></TR>\n";
# print "</TABLE>\n<HR>\n";
# }
close FILEHANDLE;
print "</BODY>\n";
print "</HTML>\n";
http://www.palmyra.ne.jp/test_cgi/hello.html
上段の hello ボタンをクリックすると “Hello World!” とブラウザに表示する
下段の mail ボタンをクリックすると “メールだよん” とブラウザに表示し、自分宛にメール送信する
1.hello.html の source list
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP">
<title>test cgi</title>
</head>
<body>
<form ACTION="/cgi-bin/hello.cgi">
<input TYPE="submit" VALUE="hello">
</form>
<br>
<form ACTION="/cgi-bin/mail.cgi">
<input TYPE="submit" VALUE="mail">
</form>
</body>
</html>
2.hello.cgi の source list
#!/usr/bin/perl -w
$|=1;
print "Content-type: text/html", "\n\n";
print "<HTML>";
print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;charset=EUC-JP\">";
print "<H1>";
print "hello world!\n";
print "</H1>";
print "</HTML>";
3.mail.cgi の source list
#!/usr/bin/perl -w
$|=1;
print "Content-type: text/html", "\n\n";
print "<HTML>";
print "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;charset=EUC-JP\">";
print "<H1>";
print "メールだよん\n";
print "</H1>";
print "</HTML>";
$myaddress="zenobia\@palmyra.ne.jp";
$mailprogram='/usr/sbin/sendmail';
open MAIL, "|$mailprogram $myaddress"
or die "Can not open mail\n";
print MAIL "From: cgi\n";
print MAIL "Subject: test cgi sendmail\n\n";
print MAIL "Hi! This is mail from test cgi to you.\n\n";
close MAIL;
http://www.palmyra.ne.jp/test_cgi/formsample.html
ボタンをクリックすると テキストボックスに入力した文字列を表示する
1.formsample.html の source list
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP">
<title>CGI form sample</title>
</head>
<body>
<form METHOD="post" ACTION="/cgi-bin/formsample.cgi">
<input TYPE="text" NAME="field1">
<input TYPE="text" NAME="field2">
<input TYPE="submit" VALUE="submit">
</form>
</body>
</html>
2.formsample.cgi の source list
#!/usr/bin/perl
use CGI qw(:standard);
$field1 = param('field1');
$field2 = param('field2');
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>formsample</TITLE></HEAD>\n";
print "<BODY>\n";
print "<H1>$field1</H1>";
print "<H2>$field2</H2>";
print "</BODY>\n";
print "</HTML>\n";
http://www.palmyra.ne.jp/test_cgi/formsample2.html
ボタンをクリックすると テキストボックスに入力した文字列を、自分宛にメール送信する
1.formsample2.html の source list
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP">
<title>CGI form sample</title>
</head>
<body>
<form METHOD="post" ACTION="cgi-bin/formsample2.cgi">
<input TYPE="text" NAME="field1">
<input TYPE="text" NAME="field2">
<input TYPE="submit" VALUE="submit">
</form>
</body>
</html>
2.formsample2.cgi の source list
#!/usr/bin/perl
$|=1;
use CGI qw(:standard);
$field1 = param('field1');
$field2 = param('field2');
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>formsample</TITLE></HEAD>\n";
print "<BODY>\n";
print "<H1>$field1</H1>";
print "<H2>$field2</H2>";
print "</BODY>\n";
print "</HTML>\n";
$myaddress="zenobia\@palmyra.ne.jp";
$mailprogram='/usr/sbin/sendmail';
open MAIL,"|$mailprogram $myaddress"
or die "Cannot open mail\n";
print MAIL "From: cgi\n";
print MAIL "Subject:form sample\n\n";
print MAIL "First box is $field1.\n";
print MAIL "Second box is $field2.\n";
close MAIL;