なお,私が持っている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> のデータが入っている。
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にリンクするのでアクセスログに応用できます。
ただし,データが無限に増殖していくので件数制限を付加する必要があります。
kibita@orange.or.jp