#! /usr/local/bin/perl require './jcode.pl'; require "./cgi-lib.pl"; #描繪揭示板ver.1.32 # (c)2000,poo site # Web page:http://www2.plala.or.jp/junji21/index.htm #密碼設定英數12字內 $pass="01234567"; #回首頁URL $homepage = "../index.html"; #配色等設定 #壁紙設定 $BACKGIF = "bg.jpg"; #背景色(無壁紙時) $BGcolor="ffffff"; #本文表示色 $TXcolor="#000000"; #日期表示色 $DTcolor="#666666"; #畫的編號表示色 $NOcolor="#333333"; #投稿輸入欄表示色 $CM2color="#ccccff"; #投稿顯示欄表示色 $CMcolor="#ffffff"; #投稿顯示欄把表示色 $BDcolor="#ffffff"; #投稿姓名欄表示色 $NMcolor="#3333ff"; #TITLE表示色 $TLcolor="#333333"; #留言設定 #TITLE使用畫像時 $TITLEGIF = ""; $TGW = '150';#畫寬 $TGH = '50';#畫高 #塗鴉投稿LINK使用畫像時 $NEWGIF = ""; $NGW = '150';#畫寬 $NGH = '50';#畫高 #留言投稿LINK使用畫像時 $NEWCOM = ""; $NCW = '150';#畫寬 $NCH = '50';#畫高 #TITLE $TITLE="塗鴉簿"; #字型 $TITLEFACE = "CHINESE_BIG5"; #RETURN文字 $RETURN="HOME"; #訊息1 $MESSAGE1="管理用"; #訊息2 $MESSAGE2="塗鴉"; #訊息3 $MESSAGE3="關於這張塗鴉的留言"; #訊息4 $MESSAGE4="留言"; #訊息5 $MESSAGE5="最新塗鴉"; #訊息6 $MESSAGE6="最新留言"; #訊息7 $MESSAGE7="只留言"; #訊息8 $MESSAGE8="回塗鴉簿"; #訊息9 $MESSAGE9="回覆"; #文字大小 $moji="2"; #留言欄與瀏覽器的比例 $CWIDTH="80%"; # URL自動聯結(0=no 1=yes) $autolink = 1; #HOME ICON使用(0=no 1=yes) $home_icon = 0; $home_gif = "";#HOME ICON檔名 $home_wid = 25;#畫寬 $home_hei = 22;#畫高 #畫面表示枚數及畫像保留枚數 #一畫面表示枚數 $gznumber=10; #畫像保留枚數50枚 #若變更時getpic.cgi也要一起變更 $lgnumber=50; #HOST表示 #留言與HOST同時表示(0:off 1:on) $sw_host=0; #單獨留言 #單獨留言(0:不能 1:能) $cm_sw=0; #表示順序 #標準表示順序(0:塗鴉 1:留言) $def_sort=0; #LOCK #LOCK設定(0:symlink標準 1:open 2:無) $lock_mode=0; #路徑設定 #塗鴉時叫出的檔案路徑 $oefile="./oekaki.html"; #內部畫像檔案路徑 $gzfile="./"; #絕對畫像檔案路徑 $gz2file="./"; # #以下請勿變更 $moji1=$moji-1; $moji3=$moji+1; $moji5=$moji+3; $lock_file ="./lock/count.lock"; $script = "picture.cgi"; $method = 'POST'; 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/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s//>/g; $value =~ s/\"/"/g; if ($name eq 'del') { push(@delete,$value); } if ($name eq 'del_res') {$value =~ s/[^a-zA-Z0-9\/\:]//gs;push(@delres,$value); } $FORM{$name} = $value; } $name = $FORM{'name'}; $name =~ s/\r//g; $name =~ s/\n//g; $title = $FORM{'title'}; $title =~ s/\r//g; $title =~ s/\n//g; $comment = $FORM{'comment'}; $comment =~ s/\r\n/
/g; $comment =~ s/\r/
/g; $comment =~ s/\n/
/g; $email = $FORM{'email'}; $email =~ s/\r//g; $email =~ s/\n//g; $url = $FORM{'url'}; $url =~ s/^http\:\/\///; $url =~ s/\r//g; $url =~ s/\n//g; $mode = $FORM{'mode'}; $sort = $FORM{'sort'}; $res_mode = $FORM{'res'}; $count_file = "./count"; $targetfile = "./data.txt"; $erasefile = "./erase.txt"; if ($sort eq "0"){$s_mode=0;} elsif($sort eq "1"){$s_mode=1;} else {$s_mode=$def_sort;} if ($mode eq "msg") { ®ist; } if ($mode eq "res_msg"){&res_msg;} if ($mode eq "admin") { &pass; } if ($mode eq "del") { &del; } if ($mode eq "master_del") { &master_del; } if ($mode eq "l_check") { &check_lock; } if (open(FILE,"<$count_file")) { $access = ; close(FILE); } @res=(); $comments=0; open(FILE,"<$targetfile"); while(){ chop; ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$_); $title =~ s/\r//g; $title =~ s/\n//g; if($pic =~ /[\d]/){ $rank{$pic*100+$res[$pic]}.="$pic\t$name\t$mail\t$http\t$body\t$date\t$ip\t$host\t$title"; $res[$pic]++; if($s_mode==1){ $sort[$comments]=$pic; $coms[$pic]=0; $comments++; } } } close(FILE); if($s_mode==1) { $pnum=$access; for($i=$comments-1;$i>0;$i--) { if($coms[$sort[$i]]>0){} else { $s[$pnum]=$sort[$i]; $coms[$sort[$i]]++; $pnum--; } } $i=$access; while($i>$access-$lgnumber && $i>0) { if($res[$i]==0) { $s[$pnum]=$i; $pnum--; } $i--; } } @era=(); open(FILE,"<$erasefile"); while(){ $era[$_]=1; } close(FILE); &head; if ($NEWGIF eq '') { print "
$MESSAGE2

\n"; } else { print "

\"NEW

\n"; } if($cm_sw==1){ if ($NEWCOM eq '') { print "

$MESSAGE7

\n"; } else { print "

\"NEW

\n"; } } print << "EOH";

[$RETURN] [$MESSAGE1]

[$MESSAGE5] [$MESSAGE6]

EOH if ($FORM{'page'} eq '') { $cc = 0; } else { $cc = $FORM{'page'}; } if ($FORM{'fno'} eq '') { $i = $access-$cc; } else { $i = $FORM{'fno'}; } $start=$cc; while($i>0 && $i>($access-$lgnumber) && ($cc-$start)<$gznumber ) { if($s_mode==0) {$file=$i%$lgnumber;$article=$i;} else {$file=$s[$i]%$lgnumber;$article=$s[$i];} ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$rank{$article*100}); $flag=0; if($cm_sw==1) { if(($title eq "") && ((-e "$gzfile".$file.".gif"==0 && -e "$gzfile".$file.".jpg"==0 && -e "$gzfile".$file.".png"==0 )|| $era[$file]==1)){$i--;$flag=1;} }else { if((-e "$gzfile".$file.".gif"==0 && -e "$gzfile".$file.".jpg"==0 && -e "$gzfile".$file.".png"==0 )|| $era[$file]==1){$i--;$flag=1;} } if($flag==0) { print << "EOH";
EOH if($title eq "") { print << "EOH"; EOH } print << "EOH";
[$article] EOH if( -e "$gzfile".$file.".png"==0){ if(-e "$gzfile".$file.".jpg"==0){ print "

"; }else{ print "

"; } }else { print "

"; } print << "EOH";
EOH $com_flag=0; for($j=0;$j<$res[$article];$j++) { ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$rank{$article*100+$j}); if($title ne "") { $com_flag=1; print "[$article]
\n"; print "$title
\n"; } if ($mail =~ /^\s*$/) { print "$name\n"; } else{ print "\n"; print "$name\n"; } $http=~ s/^http\:\/\///; if ($http && $home_icon) { print "\n"; } elsif ($http && $http ne 'http://' && $home_icon == 0) { print "[Home Page]\n"; } if($sw_host==1){ print "\n"; print "$date
$ip $host\n"; print "
\n"; } else{ print "\n"; print "$date\n"; print "\n"; } print << "EOH";
$body

EOH if($title ne "") { $body =~ s/"/'/g; print << "EOH"; EOH } if($title ne "" && $res[$article]>1) { print "


\n"; print "
    \n"; } } if($com_flag==1 && $res[$article]>1) { print "
\n"; } print << "EOH";

EOH $i--; $cc++; } $file=$i%$lgnumber; if($i<0){$i=$lgnumber-1;} } print "
\n"; if($i==($access-$lgnumber) || $i==0 || $cc %$gznumber==0 ) { if($cc>$gznumber){ print << "EOH"; EOH } } if($cc % $gznumber== 0 && $cc<$lgnumber && $i!=0) { #次頁處理 print << "EOH"; EOH } print "
\n"; &foot; exit; #留言處理 sub regist { if ($name eq "") { &CgiError("沒寫名字","按上一頁重寫"); exit; } if ($comment eq "") { &CgiError("沒有留言", "按上一頁重寫"); exit; } my ($sec,$min,$hour,$mday,$mon,$year,$wday,$seireki_nen,$month,$tuki,$youbi,@youbi,$currenttime,$seireki); ($sec,$min,$hour,$mday,$mon,$year,$wday)=(localtime)[0,1,2,3,4,5,6]; $seireki_nen = $year + 1900; $month = $mon + 1; @youbi = ("Sun","Mon","Tue","Wed","Thurs","Fri","Sat"); $youbi = $youbi[$wday]; $currenttime = sprintf("%02d:%02d:%02d",$hour,$min,$sec); $seireki = "$seireki_nen" . "/" . "$month" . "/" . "$mday" . " ($youbi.)"; $date = "$seireki" . " $currenttime"; if ($autolink) { &auto_link($comment);} #LOCK處理 if ($lock_mode == 0) { &process_lock; } elsif ($lock_mode == 1) { &process_lock2; } if($res_mode eq "new") { if (open(FILE,"<$count_file")) { $access = ; close(FILE); } if (open(FILE,">$count_file")) { $access++; print FILE $access; close(FILE); } open(OUT,">>$erasefile") or &CgiDie("現在無法留言", "請等一下再傳送"); $pic=$access; $pic =~ s/[^0-9]//gs; $pic=$pic%$lgnumber; print OUT "$pic\n"; close(OUT); if($access>$lgnumber) { open(DATA,"$targetfile") or &CgiDie("現在讀不到檔案","請等一下再傳送"); @lines=; close(DATA); foreach $line (@lines) { ($pic,$nm,$mail,$http,$body,$dt,$ip,$host,$subject)=split("\t",$line); $pic =~ s/[^0-9]//gs; if ($pic ne $access-$lgnumber){ push(@new,$line); } } open(DATA,">$targetfile") or &CgiDie("現在讀不到檔案","請等一下再傳送"); print DATA @new; close(DATA); } if($title eq "") { $title="無題"; } open(OUT,">>$targetfile") or &CgiDie("現在無法留言","請等一下再傳送"); print OUT "$access\t$name\t$email\t$url\t$comment\t$date\t$ENV{'REMOTE_ADDR'}\t$ENV{'REMOTE_HOST'}\t$title\n"; } else { open(OUT,">>$targetfile") or &CgiDie("現在無法留言","請等一下再傳送"); print OUT "$FORM{'resno'}\t$name\t$email\t$url\t$comment\t$date\t$ENV{'REMOTE_ADDR'}\t$ENV{'REMOTE_HOST'}\t$title\n"; } close(OUT); &process_unlock; if($FORM{'cook'} eq 'on'){&set_cookie;} $mode=""; $name=""; $comment=""; $sub=""; $email=""; $url=""; } #留言畫面 sub res_msg { &get_cookie; $file=$FORM{'resno'}%$lgnumber; &head; if($res_mode eq "new") { print "
$MESSAGE8

\n"; } elsif($res_mode eq "comment") { $comment =~ s/<//g; print << "EOH";

$MESSAGE8

$comment

EOH } else { print "
$MESSAGE3

\n"; if( -e "$gzfile".$file.".png"==0){ if(-e "$gzfile".$file.".jpg"==0){ print "

"; }else { print "

"; } }else { print "

"; } } print << "EOH";

EOH if($res_mode eq "new") { print "title :
\n"; } print << "EOH"; name :
e-mail :
URL :
cookie reminder
^OSB

EOH &foot; exit; } #FILE LOCK處理 sub process_lock { local($wait) = 10; while ( !symlink(".",$lock_file) ) { &CgiDie("lock busy") if --$wait <= 0; sleep (6); } } #FILE LOCK處理2 sub process_lock2 { local($flag) = 0; foreach (1 .. 5) { if (-e $lock_file) { sleep(1); } else { open(LOCK,">$lock_file") || &CgiDie("lock busy"); close(LOCK); $flag = 1; last; } } if ($flag == 0) { &CgiDie("lock busy") } } #FILE UNLOCK處理 sub process_unlock { unlink ($lock_file); } #LOCK監視 sub check_lock { if ($FORM{'pass'} ne "$pass") { &CgiError("密碼錯誤","請按上一頁重打");exit; } if($FORM{'operate'} eq "unlock") { &process_unlock; } else { $lock_state="正常"; local($wait) = 4; while ( !symlink(".",$lock_file) && $wait>0 ) { $wait--; if ($wait <= 0){$lock_state="異常";} sleep (6); } if($lock_state eq "正常") { &process_unlock; } } &head; print << "EOH";
EOH if($FORM{'operate'} eq "unlock") { print "
LOCK解除
"; } else { print "現在FILE LOCK狀況: $lock_state"; if($lock_state eq "異常") { print "

"; print "流量過大以致FILE LOCK
"; print "[FILE LOCK解除]"; } } print << "EOH";

[回塗鴉簿]

EOH &foot; } #密碼 sub pass { &head; print << "EOH";

輸入密碼


EOH &foot; exit; } #管理者刪除處理 sub del{ if ($FORM{'pass'} ne "$pass") { &CgiError("密碼錯誤","請按上一頁重打");exit; } if (open(FILE,"<$count_file")) { $access = ; close(FILE); } @res=(); open(FILE,"<$targetfile"); while(){ chop; ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$_); $title =~ s/\r//g; $title =~ s/\n//g; if($pic =~ /[\d]/){ $rank{$pic*100+$res[$pic]}.="$pic\t$name\t$mail\t$http\t$body\t$date\t$ip\t$host\t$title"; $res[$pic]++; } } close(FILE); @era=(); open(FILE,"<$erasefile"); while(){ $era[$_]=1; } close(FILE); &head; print << "EOH";

file lock check

點選項目後按"消除確定"

[回塗鴉簿]

EOH if ($FORM{'page'} eq '') { $cc = 0; } else { $cc = $FORM{'page'}; } if ($FORM{'fno'} eq '') { $i = $access-$cc; } else { $i = $FORM{'fno'}; } $start=$cc; while($i>0 && $i>($access-$lgnumber) && ($cc-$start)<$gznumber ) { $file=$i%$lgnumber; ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$rank{$i*100}); $flag=0; if($cm_sw==1) { if(($title eq "") && ((-e "$gzfile".$file.".gif"==0 && -e "$gzfile".$file.".jpg"==0 && -e "$gzfile".$file.".png"==0 )|| $era[$file]==1)){$i--;$flag=1;} }else { if((-e "$gzfile".$file.".gif"==0 && -e "$gzfile".$file.".jpg"==0 && -e "$gzfile".$file.".png"==0 )|| $era[$file]==1){$i--;$flag=1;} } if($flag==0) { print << "EOH";

EOH if($title eq "") { print << "EOH"; EOH } print ""; print "
[$i] EOH if( -e "$gzfile".$file.".png"==0){ #### if( -e "$gzfile".$file.".jpg"==0){ print "

";#### }else{ print "

";#### } }else#### {#### print "

";#### }#### print << "EOH"; ?
\n"; for($j=0;$j<$res[$i];$j++) { ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$rank{$i*100+$j}); print "消除\n"; if ($mail =~ /^\s*$/) { print "$name\n"; } else{ print "\n"; print "$name\n"; } if ($http =~ /^\s*$/ || $http eq 'http://') { } else{ print "[Home Page]\n"; } print "$date\n"; print "
\n"; print "$body\n"; print "

\n"; } print "


\n"; $i--; $cc++; } $file=$i%$lgnumber; if($i<0){$i=$lgnumber-1;} } print "
\n"; print "
\n"; if($i==($access-$lgnumber) || $i==0 || $cc %$gznumber==0 ) { if($cc>$gznumber){ print << "EOH"; EOH } } if($cc % $gznumber== 0 && $cc<$lgnumber && $i!=0) { print << "EOH"; EOH } print "
\n"; &foot; exit; } #全部消除處理 sub master_del{ if ($FORM{'pass'} ne "$pass") { &CgiError("密碼錯誤","請按上一頁重打");exit; } if ($FORM{'del'} eq "" && $FORM{'del_res'} eq "") { &CgiError("沒勾選","請按上一頁勾選");exit; } #lock處理 if ($lock_mode == 0) { &process_lock; } elsif ($lock_mode == 1) { &process_lock2; } if($FORM{'del_res'} ne "") { open(DATA,"$targetfile") or &CgiDie("現在讀不到檔案","請等一下再傳送"); @lines=; close(DATA); foreach $line (@lines) { $flag=0; ($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$line); $title =~ s/\r//g; $title =~ s/\n//g; $date =~ s/[^a-zA-Z0-9\/\:]//gs; foreach $res (@delres) { if ($date eq $res) {$flag = 1;if($title ne ""){push(@delete,$pic);$FORM{'del'}="del";}} } if ($flag == 0) { push(@new,$line); } } open(DATA,">$targetfile") or &CgiDie("現在無法寫入檔案","請等一下再傳送"); print DATA @new; close(DATA); } if($FORM{'del'} ne "") { open(OUT,">>$erasefile") or &CgiDie("現在無法寫入檔案","請等一下再傳送"); foreach $pic (@delete) { $pic =~ s/[^0-9]//gs; $pic=$pic%$lgnumber; unlink "$gzfile$pic.gif";#### unlink "$gzfile$pic.jpg";#### unlink "$gzfile$pic.png";#### print OUT "$pic\n"; } close(OUT); } &process_unlock; &del; } #URL自動LINK sub auto_link { $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1$2<\/a>/g; } #COOKIE設定 sub set_cookie { #COOKIE60日有效 ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg) = gmtime(time + 60*24*60*60); $yearg += 1900; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul', 'Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT"; $cook="name\:$name\,email\:$email\,url\:$url"; print "Set-Cookie: OEBBS=$cook; expires=$date_gmt\n"; } #COOKIE取得 sub get_cookie { @pairs = split(/\;/, $ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { local($name, $value) = split(/\=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/\,/, $DUMMY{'OEBBS'}); foreach $pair (@pairs) { local($name, $value) = split(/\:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_email = $COOKIE{'email'}; $c_url = $COOKIE{'url'}; if($FORM{'cook'}eq 'on'){ if ($FORM{'name'}) { $c_name = $FORM{'name'}; } if ($FORM{'email'}) { $c_email = $FORM{'email'}; } if ($FORM{'url'}) { $c_url = $url; } } } #畫布 sub head{ print << "EOH"; Content-type: text/html 塗鴉簿 EOH if ($BACKGIF eq '') { print "

\n"; } else { print "

\n"; } if ($TITLEGIF eq '') { print "

+ $TITLE +

\n"; } else { print "

\"TITLE\"

\n"; } } #FOOT sub foot{ #不可刪除LINK print << "EOH";

EOH exit; }