オレンジネットユーザーズ
CGI勉強会

第7回 実際にCGIスクリプトを作ってみる Perlプログラミング編(2)

Since 1996.7.14 / Last Update 1996.7.16

1.掲示板

掲示板の例として,『このスクリプトを実行した日時を記録にとり 履歴の内容を表示する』というものを作ってみました。
常に新しい日時がファイルの先頭に書き込まれるようになっています。
フォームから取り込むメッセージは有りません。

なお,私が持っているUNIXマシン(PerlはVer.4)では動作確認済みですが, サーバは持っていないので実際にオレンジの環境で動くものではありません。

プログラム

#!/usr/bin/perl
#
# Copyright 1996 kibitaro
#
$bbs_file = "/home/kibita/dat/acslog";

#連想配列に月の数値をセットする
%m = ("Jan","01","Feb","02","Mar","03","Apr","04",
      "May","05","Jun","06","Jul","07","Aug","08",
      "Sep","09","Oct","10","Nov","11","Dec","12");
chop($day = `date`); #システムdateの取得(Sun Jul 14 17:25:00 JST 1996)
                     #localtime(time)だと2000年問題で困るから
($w,$mm,$d,$t,$g,$y) = split(' ',$day);
$date = "$y/$m{$mm}/$d $w $t $g";

open(BS,"<$bbs_file") || die "Open Error.\n";
@log=<BS>; #ファイルの全てのデータを配列logに代入
close(BS);

open(BS,">$bbs_file") || die "Open Error.\n";
flock(BS,2);
print BS "<LI>$date\n"; #実行日時を先頭に書き込む
print BS @log;                #次に元のデータを追加する
close(BS);

#print文の次の行〜EOFと書かれた行までのデータを表示する(第5回)
#CGIスクリプトからサーバにデータを送る場合,何のデータか明示しないと
#いけないので Content-type で指定する。次の行は必ず1行空ける。
print <<EOF;
Content-type: text/html

<HEAD><TITLE>BBS</TITLE></HEAD>
<BODY>
<OL>
EOF

open(BS,"<$bbs_file") || die "Open Error.\n";
print <BS>; #ファイルのデータを全て表示する
close(BS);

print <<EOF;
<HR>
<ADDRESS>kibita@orange.or.jp</ADDRESS>
</BODY>
EOF

exit;
ファイルには最初 </OL> のデータが入っている。

サーバに渡されるHTMLデータ

Content-type: text/html

<HEAD><TITLE>BBS</TITLE></HEAD>
<BODY>
<OL>
<LI>1996/07/14 Sun 22:51:30 JST
<LI>1996/07/14 Sun 22:51:08 JST
<LI>1996/07/14 Sun 22:50:42 JST
<LI>1996/07/14 Sun 22:50:37 JST
</OL>
<HR>
<ADDRESS>kibita@orange.or.jp</ADDRESS>
</BODY>
これが実行者の画面上に表示されるのです。

この表示の部分をやめてスクリプトに
print "Location: URL\n\n";
と書けば URLにリンクするのでアクセスログに応用できます。
ただし,データが無限に増殖していくので件数制限を付加する必要があります。


[HOME][メニュー] [6][8]

kibita@orange.or.jp