「WEBメモプログラム-ソース」の編集履歴(バックアップ)一覧はこちら
WEBメモプログラム-ソース - (2008/07/15 (火) 17:47:55) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p>#!/usr/local/bin/perl<br />
###################################################<br />
#webmemo.cgi WEBメモプログラム<br />
# 2004.01.22 MARCO<br />
# edit 2004.01.27 MARCO<br />
#<br />
# パーミッション<br />
# webmemo.cgi(755)<br />
# $datafile(666)<br />
###################################################<br />
require 'jcode.pl';<br />
############ 設定項目 ##############<br />
#データファイル<br />
$defaultfile='webmemo.txt';<br />
#ログファイル(つけた名前+連番+'.log')<br />
$logfile='weblog';<br />
#バックグランドの画像ファイル<br />
$bg_gif='onpu.gif';<br />
#ページのタイトル<br />
$title='WebMemo';<br />
#バックグランドカラー<br />
$bg_color='#FFFFFF';<br />
#ホームページアドレス<br />
$hp_address='../../../index.html';<br />
#ホームページアイコン<br />
$hp_icon='top.gif';<br />
#テキストの文字色<br />
$textcolor='#003366';<br />
$linkcolor='#006633';<br />
#テーブルの背景色<br />
$tblcolor1='#ffffcc';<br />
$tblcolor2='#ccffff';<br />
$tblcolor3='#eeeeee';<br />
#自動ログ実行間隔<br />
$autolog=50;<br />
#1ページに表示する件数<br />
$pagevew=10;<br />
#クッキー名<br />
$CookieName='webmemo';<br />
#管理者パスワード<br />
$master_key='password';<br />
######################################<br />
#日付と時間を取得<br />
($sec,$min,$hour,$dd,$mm,$yy,$wd)=localtime();<br />
#日付時刻のフォーマットを整える<br />
$yy+=1900;<br />
$mm++;<br />
$mm=sprintf("%02d",$mm);<br />
$dd=sprintf("%02d",$dd);<br />
$hour=sprintf("%02d",$hour);<br />
$min=sprintf("%02d",$min);<br />
$udate="$yy/$mm/$dd $hour:$min";</p>
<p>#環境変数からクッキーの情報を取得<br />
$cookies=$ENV{'HTTP_COOKIE'};<br />
@pairs=split(/;/,$cookies);<br />
#この掲示板のクッキーだけを抜き出す<br />
foreach $pair (@pairs){<br />
($name,$value)=split(/=/,$pair);<br />
$name=~ s/ //g;<br />
$DUMMY{$name}=$value;<br />
}<br />
#さらに、各パーツに分解する<br />
@pairs=split(/,/,$DUMMY{$CookieName});<br />
foreach $pair (@pairs) {<br />
($name,$value)=split(/\!/,$pair);<br />
$COOKIE{$name}=$value;<br />
}</p>
<p>#フォームからのデータを取得<br />
use CGI;<br />
$form=CGI->new();<br />
$sts=$form->param("status");<br />
$ittl=$form->param("title");<br />
$iurl=$form->param("url");<br />
$ikey=$form->param("key");<br />
$icom=$form->param("comment");<br />
$idno=$form->param("delno");<br />
$ipln=$form->param("pline");<br />
$datafile=$form->param("filename");<br />
if($datafile eq ''){<br />
$datafile=$defaultfile;<br />
}<br />
#コメントの文字変換<br />
$icom=~ tr/+/ /;<br />
$icom=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;<br />
$icom=~ s/</&lt;/g;<br />
$icom=~ s/>/&gt;/g;<br />
$icom=~ s/\n//g;<br />
$icom=~ s/\,/,/g;<br />
&jcode'convert(*icom,'sjis');</p>
<p>open(DAT,"$datafile");<br />
@DATA=<DAT>;<br />
close(DAT);</p>
<p>opendir(DIR,'.');<br />
@files=readdir(DIR);<br />
closedir(DIR);<br />
$fcnt=0;<br />
foreach $jfile (@files){<br />
$ext=substr($jfile,rindex($jfile,"."));<br />
if($ext eq '.log'){<br />
$fcnt++;<br />
}<br />
}<br />
$fcnt++;</p>
<p>if($sts eq 'ins' && $iurl ne '' && $ikey eq
$master_key){<br />
#タイトルがない場合はURLをセット<br />
if($ittl eq ''){<br />
$ittl=$iurl;<br />
}<br />
#連番を取得<br />
$newno=0;<br />
foreach(@DATA){<br />
($no,$ttl,$url,$com,$date)=split(/\t/,$_);<br />
if($no>$newno){$newno=$no;}<br />
}<br />
$newno++;<br />
unshift(@DATA,"$newno\t$ittl\t$iurl\t$icom\t$udate\n");<br />
<a href="mailto:$count=@DATA">$count=@DATA</a>;<br />
if($count>$autolog){<br />
pop(@DATA);<br />
}<br />
#自動ログ出力<br />
if($newno%$autolog==0){<br />
$fcnt=sprintf("%05d",$fcnt);<br />
$newlogfile="$logfile$fcnt\.log";<br />
open(LOG,">$newlogfile");<br />
print LOG @DATA;<br />
close(LOG);<br />
}<br />
open(DAT,">$datafile");<br />
print DAT @DATA;<br />
close(DAT);<br />
set_cookie();<br />
$COOKIE{'key'}=$ikey;<br />
}</p>
<p>if($sts eq 'del' && $ikey eq $master_key){<br />
$i=0; $match=0;<br />
foreach(@DATA){<br />
($no,$ttl,$url,$com,$date)=split(/\t/,$_);<br />
if($idno==$no){<br />
splice(@DATA,$i,1);<br />
$match=1;<br />
last;<br />
}<br />
$i++;<br />
}<br />
if ($match) {<br />
open(DAT,">$datafile");<br />
print DAT @DATA;<br />
close(DAT);<br />
}<br />
}</p>
<p>print "Content-type: text/html\n\n";<br />
print "<html><head>";<br />
print "<meta http-equiv=\"Content-Type\"
content=\"text/html;charset=x-sjis\">\n";<br />
print "<STYLE TYPE=\"text/css\">\n";<br />
print "<!--\n";<br />
print "a:link { text-decoration:none; color:$linkcolor; }\n";<br />
print "a:visited { text-decoration:none; color:$linkcolor; }\n";<br />
print "a:active { text-decoration:none; color:$linkcolor; }\n";<br />
print "a:hover { text-decoration:underline; color:$linkcolor; }\n";<br />
print "-->\n";<br />
print "</STYLE>\n";<br />
print "<title>$title</title></head>\n";<br />
print "<body bgcolor=$bg_color text=$textcolor link=$linkcolor
alink=$linkcolor vlink=$linkcolor background=$bg_gif>\n";<br />
print "<center><font
size=5><b>$title</b></font></center><br>\n";</p>
<p>print "<table border=0 width=100%><tr><td>\n";<br />
if($hp_icon ne ''){print "<a href=$hp_address><img src=$hp_icon
border=0></a>\n";}<br />
else{print "<a href=$hp_address>HomePage</a>\n";}<br />
print "</td><td align=right>";<br />
if($fcnt>1){<br />
print "<form action=webmemo.cgi method=POST>\n";<br />
print "ログ<select name=filename>\n";<br />
print "<option value=$defaultfile>現在のファイル<br>\n";<br />
foreach $jfile (@files){<br />
$ext=substr($jfile,rindex($jfile,"."));<br />
if($ext eq '.log'){<br />
print "<option value=$jfile>$jfile<br>\n";<br />
}<br />
}<br />
print "</select><input type=submit value=開く></form>\n";<br />
}<br />
print "</td></tr></table>";</p>
<p>print "<form action=webmemo.cgi method=POST>\n";<br />
print "<input type=hidden name=status value=del>\n";<br />
print "<table border=0 width=100% cellspacing=0 cellpadding=0>\n";<br />
$lcnt=0;<br />
$wymd='';<br />
if($ipln eq ''){$pline=0;}else{$pline=$ipln;}<br /><a href="mailto:$end_data=@DATA-1">$end_data=@DATA-1</a>;<br />
$page_end=$pline+($pagevew-1);<br />
if($page_end>=$end_data){<br />
$page_end=$end_data;<br />
}<br />
foreach(($pline .. $page_end)){<br />
($no,$ttl,$url,$com,$date)=split(/\t/,$DATA[$_]);<br />
$com=~ s/\r/<br>/g;<br />
chomp($date);<br />
$ymd=substr($date,0,10);<br />
$hms=substr($date,11,5);<br />
if($ymd ne $wymd){<br />
print "<tr><td colspan=3 bgcolor=$tblcolor3><font
size=4> <b>$ymd</b></font></td></tr>\n";<br />
$wymd=$ymd;<br />
}<br />
if($lcnt%2==0){$tbc=$tblcolor1;}<br />
else{$tbc=$tblcolor2;}<br />
print "<tr bgcolor=$tbc><td colspan=2><input type=radio
name=delno value=$no>\n";<br />
print "■ <a
href=$url><b>$ttl</b></a></td>\n";<br />
print "<td width=10%><font size=1>- $hms
-</font></td></tr>\n";<br />
print "<tr bgcolor=$tbc><td
width=10%></td><td><font
size=2>$com</font></td><td></td></tr>\n";<br />
$lcnt++;<br />
}<br />
if($datafile eq $defaultfile && @DATA>0){<br />
print "<tr><td colspan=3 bgcolor=$tblcolor3 align=right><font
size=2>削除キー</font>";<br />
print "<input type=password size=12 name=key
value=$COOKIE{'key'}>\n";<br />
print "</font><input type=submit
value=削除></td></tr>\n";<br />
}<br />
print "</form></table>\n";<br />
$next_line=$page_end + 1;<br />
if($page_end!=$end_data){<br />
print "<form method=POST action=webmemo.cgi>\n";<br />
print "<input type=hidden name=pline value=$next_line>\n";<br />
print "<input type=submit value=次のページ>\n";<br />
print "</form>\n";<br />
}<br />
#投稿フォーム<br />
if($datafile eq $defaultfile){<br />
print "<form action=webmemo.cgi method=POST>\n";<br />
print "<input type=hidden name=status value=ins>\n";<br />
print "<table border=0>\n";<br />
print "<tr><td><font
size=2>タイトル</font></td>";<br />
print "<td><input type=text size=80
name=title></td></tr>\n";<br />
print "<tr><td><font
size=2>URL</font></td>";<br />
print "<td><input type=text size=80
name=url></td></tr>\n";<br />
print "<tr><td><font size=2>メモ</font></td>";<br />
print "<td><textarea name=comment rows=4
cols=60></textarea></td></tr>\n";<br />
print "<tr><td><font size=2>キー</font></td>";<br />
print "<td><input type=password size=12 name=key
value=$COOKIE{'key'}>\n";<br />
print "</font><input type=submit
value=送信></td></tr></table>\n";<br />
print "</form>\n";<br />
}</p>
<p>print "</body></html>\n";<br />
exit;<br />
sub set_cookie{<br />
$ENV{'TZ'} = "GMT";<br />
local(@date)=localtime(time+10*86400);<br />
$date[5]+=1900;<br />
$date[3]=sprintf("%02d",$date[3]);<br />
$date[2]=sprintf("%02d",$date[2]);<br />
$date[1]=sprintf("%02d",$date[1]);<br />
$date[0]=sprintf("%02d",$date[0]);<br />
$wday=('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
[$date[6]];<br />
$month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
[$date[4]];<br />
$date_gmt="$wday, $date[3]\-$month\-$date[5] $date[2]:$date[1]:$date[0]
GMT";<br />
$cook="key\!$ikey";<br />
print "Set-Cookie: $CookieName=$cook; expires=$date_gmt\n";<br />
}</p>
<p> </p>