#!/usr/bin/perl require './jcode.pl'; #------------------------------------------------- $ver="UPP-BOARD v2.8";#(ファイルアップレスBBS) #------------------------------------------------- # Copyright(C) りゅういち # E-Mail:macchibi@mvf.biglobe.ne.jp # W W W :http://www.cj-c.com/ #------------------------------------------------- # データ解釈部はとほほさんのWWWUPLを参考にしました # => http://tohoho.wakusei.ne.jp/ #------------------------------------------------- #-------- 初期設定など ---------* $backurl="http://www.bonkureshougatu.com/index.html"; # 戻るURL(http://〜でOK) $pass = "11090025"; # 管理用のパスワード(半角英数字) $title = "画像アップ板"; # タイトル $tface = "Times New Roman"; # タイトルのフォント $tsize = 6; # タイトルのサイズ $tcolor= "#749FF1"; # タイトルの色(16進数) $text = "#464646"; # 標準文字色指定(16進数) $bg = "#FFF0DF"; # 背景の指定 (〃) $link = "#5548C8"; # 未リンク色の指定(〃) $vlink= "#409548"; # 既リンク色の指定(〃) $ttb = "#A8EEBB"; # 汎用的な表の色(〃) $k_back="#FFFFFF"; # 記事の中の背景色等(〃) $t_font="#464646"; # 記事タイトルの色(〃) $back = ""; # 背景画像をURLで指定 無しの場合記入しない $Top_t= 1; # 記事リストを表示する?(1=YES 0=NO) $max = 500; # 親記事最大保持件数(*ファイルも同じ数だけ保存します) $oyaup= 0; # 親記事投稿は管理者のみ?(0=NO 1=YES) $res_n= 1; # レスを使う?(0=NO 1=YES) $res_f= 1; # レスのフォーム形式は?(0=一行 1=複数行) $res_r= 1; # レスが付くとトップへ?(1=YES 0=NO) $a_max= 10; # 1ページ親記事表示件数 $h_ti = 1; # レス記事は日付けまでの表示にする?(1=YES 0=NO) $r_m = 1; # レスもメール入力可能にする?(1=YES 0=NO) $locks= 1; # ファイルをロックする?(1=YES 0=NO) $emark= '@'; # メールアドレスの置き換え文字列(画像の場合で) $link_i=0; # URLを画像に置きかえる?(1=YES 0=NO) $l_img= "./home.gif"; # 上がYESの場合使う画像 URLでもOK $h_hei= "25"; # リンク画像の縦幅(ピクセル指定) $h_wid= "46"; # リンク画像の横幅(〃) 画像を使う場合は記入する #----------------------------------------------------------------- # [ ファイルアップの設定 ] # 不適切な画像のアップの監視など、この掲示板は適切な管理が必要です # 1)@exn はアップ可能ファイル拡張子(ドット(.)から記入/必ず小文字で) # 例) .gif .txt .lzh .mid .mpeg .mp3 等 # 2)@exi は@exnを表示するアイコン画像 # ・ファイルアップするディレクトリ($i_dir)に入れる # ・画像の場合は img といれるとトップに画像が表示される # 3)ファイルをアップするディレクトリのパーミッションは777 or 755 # 4)画像縦横幅自動取得可能拡張子は以下の通り # (.gif/.GIF/.png/.PNG/.jpg/.jpeg/.JPG/.JPEG/.bmp/.BMP) #----------------------------------------------------------------- $i_mode= 1; # ファイルアップモード?(1=YES 0=NO) $met = "POST"; # データ受け渡し形式(POST or GET/↑が1の場合はPOST限定) # 相対パス/絶対パスでファイルアップする場所(ファイルアップ用) $i_dir = "./file"; # http:// のURLでファイルアップする場所(ファイル表示用) $i_Url = "http://www.bonkureshougatu.com/up/file"; # @exn と @exi は必ずペアで @exn= (".gif",".jpg",".jpeg",".png",".txt",".lzh",".zip",".mid"); @exi= ("img","img","img","img","txt.gif","arc.gif","arc.gif","oto.gif"); $H = 250; # 縮小モード時imgの最高縦幅 $W = 250; # 〃 横幅 $img_h = 15; # @exi(img以外) $no_ent $no_img の縦幅 $img_w = 15; # 〃 横幅 (限定しない場合は両方記入しない) $max_fs= 100; # ファイルサイズの限度(キロバイト(1KByte=1024Bytes)指定) $mas_c = 1; # ファイル表示は管理者チェックがいる?(1=YES 0=NO) $no_ent= "no.gif"; # ↑が1の場合許可されるまで表示される画像($i_dirにいれる) $i_ico = "i.gif"; # アイコンモードの画像代替画像(〃) # 選択文字色を設定(記事背景が初期設定の時用) @fonts= ('#464646','#D130D6','#6D70C7','#E12F49','#F0AC0F','#6AB43F','#40A495'); # 選択枠線色を設定(タイトル文字色が初期設定の時用) @hr = ('#FBD1B9','#F3A7A7','#E0BAF5','#9CB6F1','#EFE463','#A8EEBB','#B1B1AD'); # トップ上部のコメント(タグOK)広告用タグも記入可 $com_top = <<"_COM_"; あなたのオリジナル画像をアップしてください!各記事への返信は、記事下の返信投稿欄からどうぞ!
_COM_ # ↑は消しちゃダメ $bup = 1; # バックアップをとる?(1=YES 0=NO) $bup_f = "./upb.bak"; # バックアップファイル $t_mail= 1; # 投稿があるとメール通知する?(1=YES 0=NO) $mymail= 1; # 自分の投稿も通知する?(1=YES 0=NO) $mailto= 'tokumeinosennsei2001@yahoo.co.jp'; # メールアドレス(メール通知する時) $s_mail= '/usr/sbin/sendmail'; # sendmailパス ( 〃 ) $t_img= ""; # タイトル画像をURLで指定 $twid = "135"; #  〃 の横幅(ピクセル指定) $thei = "80"; #  〃 の縦幅( 〃 ) $wrap = "soft"; # フォームの改行形式 (soft=手動 or hard=強制) $cou = 1; # カウンタの設置(1=YES 0=NO) $fig = 8; # カウンタの桁数 $c_co = "#8187FC"; # テキスト=> テキスト色 $m_wid= 8; # 画像=> 画像の横サイズ $m_hei= 12; # 〃 => 画像の縦サイズ $m_pas= ""; # 〃 => 画像のあるディレクトリのパス(使用する場合のみ) $c_f = './upc.dat'; # カウンタファイルの名前 $c_loc= "./upc.loc"; # ↑のロックファイル(使用は44行目に依存) $cgi_f= "./upb.cgi"; # このファイル $log = "./upb.dat"; # 記録ファイル $lockf= "./upb.loc"; # ロックファイル(使用は44行目に依存) $srch = "./ups.cgi"; # 検索/過去ログ閲覧用CGI $tag = 1; # タグの使用 (YES=1 NO=0) $a_link= 1; # URL、E-MAILだとリンクする?(1=YES 0=NO) # -------- 発言ランク設定 ------* $M_Rank= 1; # ランキングを取得?(1=YES 0=NO) $RLOG = "upr.dat"; # ランキングログ $RDEL = 30; # ランキングから削除される日数 $RBEST = 30; # ランキング表示数 # -------- 過去ログ設定 --------*)記録はコメントのみです $klog_s= 1; # 過去ログ機能を使う?(1=YES 0=NO) $klog_c= "./upk.log"; # 過去ログ数のカウントファイル $klog_d= "."; # 過去ログ生成ディレクトリ $klog_l= 1000; # 過去ログ記録 KB 数 # ------------------------------* $k_font="MS Pゴシック"; # 基本フォント(環境による) $k_size="10pt"; # 基本フォントサイズ(ptは単位) $ie_c = "#E88C8E"; # リンクを合わせた時の色(16進数 IEのみ変化) $fss=1; # フォームのスタイルシート利用 (1=YES 0=NO) #--------------------------------------+ # [フォームのスタイルシート設定] | # 上の項目が 1 の場合設定 | # わからない場合は初期設定のままが賢明 | # $fst=StyleSheet $on/$off=JavaScript | #--------------------------------------+ $fst=<<"SS_"; input,textarea,select{ font-family :MS ゴシック; /* 文字フォント*/ font-size :10pt; /* 文字サイズ */ color :#35A63E; /* 文字色 */ background-color:#FFFFFF; /* 背景色 */ border :1 solid #FCB38B; /* 線の太さ、色*/ } SS_ # ↑は削除不可 # マウスが乗ったときや、フォーカスをえた時の動作 $on= "backgroundColor='#FEFCB4'\;"; # マウスがどいたときや、フォーカスを失った時の動作 $off="backgroundColor='#FFFFFF'\;"; # 閲覧を許可しないIPアドレス(数字/最初の3区切りを指定) 同じようにいくつでも指定可能 @ips=("xxx.xxx.xxx","yyy.yyy.yyy","zzz.zzz.zzz"); $Proxy= 0; # proxyサーバ経由だと書き込みさせない場合1 # 禁止文字列 タグ使用の場合は禁止タグも入力OK 同じようにいくつでも指定可能 @NW =("死ね"," 過去ログ\n";} if($M_Rank){$rank_link=" □ RANK\n";} &d_code_; if($mode eq "bma"){ &bma_; } if($mode eq "man"){ &man_; } if($mode eq "wri"){ &wri_; } if($mode eq "del"){ &del_; } if($mode eq "s_d"){ &s_d_; } if($mode eq "nam"){ &hen_; } if($mode eq "h_w"){ &h_w_; } if($mode eq "key"){ &key_; } if($mode eq "ran"){ &ran_; } if($mode eq "ent"){ &ent_; } &html_; # # [トップページ] # sub html_ { &get_; if($M_Rank){ open(R,"$RLOG") || &er_("Can't open $RLOG"); @RA = ; close(R); } open(LOG,"$log") || &er_("Can't open $log"); @lines = ; close(LOG); &hed_("TOP"); if ($cou) { &con_; } print "
\n"; if($t_img eq ""){print"$title\n";} elsif($t_img ne ""){print"\n";} print <<"_HTML_";
HOME  □ HELP  □ SEARCH $rank_link $klog_link
$Henko
$com_top

_HTML_ if($oyaup){print"[投稿は管理者のみになっています]";}else{&form;} if($Top_t){ print"\n"; print"
記事リスト ( )内の数字はレス数
\n"; } @NEW=(); @RES=(); @N=(); $Rno=0; $K=1; foreach (0 .. $#lines) { ($namber,$date,$name,$email,$d_may,$com,$url,$font,$ico,$type) = split(/<>/,$lines[$_]); if($type){unshift(@RES,$lines[$_]); $N[$type]++;} else{ push(@NEW,$lines[$_]); if($Top_t){ if($d_may eq ""){$d_may="無題";} if($N[$namber] eq ""){$N[$namber]=0;} $Rno++; $PAH=$a_max*$K; if(($PAH) < $Rno){$PAL="?page=$PAH$RLB"; $K++;} print"$d_may($N[$namber]) /\n"; } } } @lines=(); if($Top_t){print"
\n";} print"
    "; if($FORM{"min"}==1){$S="";$S2=" selected";$S3="";} elsif($FORM{"min"}==2){$S="";$S2="";$S3=" selected";} else{$S2="";$S=" selected";$S3="";} if($mas_c){print"・表\示許可が出るまでファイルはで表\示されます。
    \n";} print <<"_KEY_"; ・画像表\示形式
_KEY_ $total=@NEW; $page_=int(($total-1)/$a_max); if($FORM{'page'} eq ''){ $page = 0; }else { $page = $FORM{'page'}; } $end_data = @NEW - 1; $page_end = $page + ($a_max - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type,$Del,$Ip,$Ent)=split(/<>/,$NEW[$_]); ($font,$b_col)=split(/;/,$font); if($b_col eq ""){$b_col="$hr[0]";} $fimg=""; if($M_Rank){ $ROK=1; foreach $RA (@RA){ ($Na,$Co,$Em,$Ti)=split(/<>/,$RA); if($Na eq $name){$CON=" -$Co回";$ROK=0;last;} } if($ROK){$CON=" -0回";} } if($email ne ""){ $name="$name $emark"; } if($link_i){ if($url){ $url =" "; $url.="" } }else{ if($url){$url="
□U R L/ http://$url"; } } if($ico){foreach (0..$#exn){if($ico=~ /$exn[$_]$/ || $ico =~ /\U$exn[$_]\E$/){$fimg=$exi[$_]; last;}}} if($Ent==0 && $mas_c && $fimg){$fimg=$no_ent; $A=0;} print <<"_HTML_";
$namber/ $d_may
□投稿者/ $name$CON-($date)$url

_HTML_ $ico=~ s/\n//g; $A=0; $I=0; if ($i_mode && $ico) { if($fimg eq img && $FORM{'min'} == 0){&size;} if($FORM{'min'}==1){$HW="";}elsif($FORM{'min'}==2){$I=1;}else{$HW=" width=$kW height=$kH";} if($fimg eq $no_ent){$A=0;} elsif($fimg eq img){ if($I){print"";$A=1;} else{print"";$A=1;} }else{print"";$A=1;} if($img_h eq "" && $fimg ne img){print"";} elsif($img_h ne "" && $fimg ne img){print"";} $AEND=""; if($A){$AEND="$ico/";} if($ico){if(-s "$i_dir/$ico"){$Size= -s "$i_dir/$ico";}else{$Size=0;}}else{$Size=0;} if($Size){$KSize=int($Size/1024); if($KSize==0){$KSize=1;}} print"
$AEND$KSize\KB\n"; }else{ print "\n"; } if ($a_link == 1) { &auto_($comment); } print "
    $comment
    \n"; $res = 0; foreach $lines(@RES) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom, $rurl,$rfont,$rico,$rtype) = split(/<>/,$lines); if($namber eq "$rtype"){ if($res==0){print "

    \n";} if($rd_may eq ""){ $rd_may= "No Title"; } if($h_ti){$rdate=substr($rdate,0,15);} if($M_Rank){ $ROK=1; foreach $RA (@RA){ ($Na,$Co,$Em,$Ti)=split(/<>/,$RA); if($Na eq $rname){$CON="$Co回/";$ROK=0;last;} } if($ROK){$CON="0回/";} } if($r_m && $rmail ne ""){$rname="$rname $emark";} if($a_link){&auto_($rcom);} if($res_f){ print"
      ■ $rname ($CON$rdate/No$rnam)"; print"

        $rcom

    \n"; }else{ $rcom =~ s/
    / /g; print"■ $rname => $rcom"; print" ($CON$rdate/No$rnam)
    \n"; } $res++; if($N[$namber]==$res){last;} } } print "

"; if($res_n){ if($ag =~ /IE/){$wi=70;}else{$wi=52;} if($r_m){$mf="E-Mail//";}else{$mf="";} if($res_f){$CF="";} else{$CF="";} if($c_url){$Cu="";} if($c_B) {$Ch="";} print <<"_HTML_";
△NO.$namber に返信△
$Cu$Ch Name // $mf FontColor/ _HTML_ foreach (0 .. $#fonts) { if($c_font eq ""){$c_font="$fonts[0]";} print"\n"; } else { print"\"$fonts[$_]\">\n"; } } print <<"_HTML_";
コメント/$CF /削除キー/


_HTML_ } } print "\n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if ($back_line >= 0) { print <<"_BACK_"; _BACK_ } if ($page_end ne $end_data) { print <<"_NEXT_"; _NEXT_ } print"
全ページ数 / "; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i eq $af){ print "[$i] \n"; }else{print "[$i]\n";} $a+=$a_max; } print <<"_HTML_";
削除フォーム
記事NO
(半角数字)
/
削除キー/

Pass/ Mode/
_HTML_ &foot_; } # # [ログ書きこみ処理] # sub wri_ { if($Proxy){ while(($envkey,$envvalue) = each(%ENV)){ if($envkey =~ /proxy|cache|squid/i || $envvalue =~ /proxy|cache|squid/i){ &er_("ProxyServer経由では書き込みできません!"); } } } if($oyaup && $type==0 && $FORM{'pass'} ne "$pass"){&er_("親記事投稿は管理者のみです!");} if($FORM{'name'} eq ""){ &er_("名前が未入力!"); } if($FORM{'comment'} eq ""){ &er_("コメントが未入力!"); } if(length($delkey) > 8) { &er_("削除キー は8文字以内!"); } if($d_may eq ""){$d_may="NO TITLE";} $na1="$name"; if($type!=0){&get_; if($email eq "" && $r_m == 0){$email= "$c_email";} $url="$c_url";} $name="$na1"; if($locks){ &lock_("$lockf"); } open(LOG,"$log") || &er_("Can't open $log"); @lines = ; close(LOG); if($bup){&backup_;} ($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]); if($name eq $kname && $comment eq $kcom) { &er_("二重投稿は禁止です!"); } &set_; &cry_; $ipip = $ENV{'REMOTE_ADDR'}; if($res_r == 1 && $type != 0){ @r_date=(); @new=(); foreach (0 .. $#lines) { $resres = 0; ($nam,$d,$na,$mail,$d_m,$com, $u,$f,$i,$ty,$de,$ip,$En)=split(/<>/,$lines[$_]); $ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g;$i =~ s/\n//; if($ty == 0 && $nam eq "$type") {$new_line="$lines[$_]";$resres = 1;} elsif ($ty eq "$type") {push(@r_data,$lines[$_]);$resres = 1;} if($resres == 0) { push(@new,$lines[$_]); } } unshift(@new,$new_line); unshift(@new,@r_data); }else{ $h = 0; foreach (0 .. $#lines) { ($nam,$d,$na,$mail,$d_m,$com, $u,$f,$i,$ty,$de,$ip,$En) = split(/<>/,$lines[$_]); $ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g;$i =~ s/\n//; if($ty == 0) { $h++; } if($ON){ if($klog_s){unshift(@KLOG,$lines[$_]);} if($i){unlink("$i_dir/$i");} }else{push(@new,$lines[$_]);} if($h >= $max-1){$ON=1;} } } if($mas_c){$E=0;}else{$E=1;} $namber = $knum + 1; if($type==0){$font="$font;$hr";} unshift(@new,"$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$file<>$type<>$epasswd<>$ipip<>$E<>\n"); open(LOG,">$log") || &er_("Can't write $log"); print LOG @new; close(LOG); if($M_Rank){&rank;} if($klog_s && @KLOG){&log_;} if(-e $lockf){rmdir($lockf);} if($mymail){if ($t_mail == 1) { &mail_; }} else{if ($t_mail == 1 && $FORM{'email'} ne $mailto) { &mail_; }} } # # [説明書] # sub man_ { if($tag){$tagcom = "使用できます。\n";} elsif($tag == 0){ $tagcom = "使用できません。\n"; } if($res_n){$rescom="
  • このBBSは返信\機\能\があり、記事の下にあるフォームから返信できます。
  • "} if($mas_c){$imgcom="が、表\示されるには管理人のチェックが必要です。";} if($i_mode){$rescom.="
  • このBBSはファイルをアップロードできます。$imgcom
  • ";} if($M_Rank){$RMSG="
  • このBBSは発言回数を名前で取得します。$RDEL日書きこみが無いとデータから削除されます。
  • ";} &hed_("Help"); print <<"_HTML_"; □ BACK
    $title の使い方
    • この掲示板 (以下BBS) はタグを$tagcom
    • 記事は最大$max件まで保持できます。
    • 他人を中傷するような記事は管理者の判断で予\告\無く削除する場合があります。
    • 半角カナは使用しないでください。文字化けの原因になります。
    • 名前、コメントは必須記入項目です。 記入漏れするとエラーになりますのでご注意ください。
    • このBBSは、クッキー対応です。(ブラウザでクッキー有効にしている時に限り)
    • 削除キーを覚えておくと、一番下のフォームから自分の記事の削除・編集ができます。 削除した記事が親記事だった場合、レス記事、アップファイルもすべて削除されます。
    • GIF/PNG/JPEG/BMPの画像は画像幅を自動で取得可能\(アップ可能\の場合)
    • $rescom$RMSG
    _HTML_ &foot_; } # # [ヘッダ表示] # sub hed_ { print "Content-type: text/html\n\n"; print <<"_HTML_"; $title [$_[0]] _HTML_ print"\n";} elsif ($back eq "") { print ">\n";} print <<"_HTML_"; _HTML_ } # # [フッタ表示] # sub foot_ { print <<"_HTML_";

    - UPP-BOARD -
    _HTML_ exit; } # # [フォームなどのデコード] # sub d_code_ { if($ENV{'CONTENT_LENGTH'} && $ENV{'CONTENT_TYPE'} =~ /^multipart\/form-data/){ $buf=""; $read_data=""; $remain=$ENV{'CONTENT_LENGTH'}; binmode(STDIN); while($remain){ $remain-=sysread(STDIN, $buf, $remain); $read_data.=$buf; } $pos1=0; $pos2=0; $pos3=0; $delimiter=""; while (1) { $pos2=index($read_data,"\r\n\r\n",$pos1)+4; @headers=split("\r\n",substr($read_data,$pos1,$pos2-$pos1)); $filename=""; $name=""; foreach(@headers){ if($delimiter eq ""){$delimiter=$_;} elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"; filename="([^;]*)"/i){ if($3){ $filename=$3; if($filename =~ /([^\\\/]+$)/){$filename=$1;} } }elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"/i){$name= $2;} } $pos3=index($read_data,"\r\n$delimiter",$pos2); $size=$pos3-$pos2; if ($filename) { $FLAG=0; foreach $exn (@exn){ if($filename=~ /$exn$/ || $filename=~ /\U$exn\E$/){$FLAG=1; $TAIL=$exn; last;} } if($FLAG==0){&er_("アップできないファイル形式です!");} if($size > $MaxSize){&er_("ファイルサイズが大きすぎます!");} if(-e "$i_dir/$filename"){ $TIME=time; $filename="$TIME$TAIL"; $Henko="

    同じファイル名があったため、$filenameに変更しました

    "; }elsif($filename =~/[^\w\-\.]/){ $TIME=time; $filename="$TIME$TAIL"; $Henko="

    ファイル名に全角文字が含まれていたため、$filenameに変更しました

    "; } $file=$filename; if (open(OUT, "> $i_dir/$filename")) { binmode(OUT); print OUT substr($read_data, $pos2, $size); close(OUT); } chmod(0666,"$i_dir/$filename"); }elsif($name){ $FORM{$name}=substr($read_data,$pos2,$size); $value=$FORM{$name}; &jcode'h2z_sjis(*value); &jcode'convert(*value,'sjis'); if(@NW){ foreach (0..$#NW){ if(index($value,$NW[$_]) >= 0){ $NW[$_]=~ s//\>\;/g; &er_("「$NW[$_]」は使用できません!"); } } } if ($tag == 0) { $value =~ s/&/&\;/g; $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; } else { $value =~ s/<>/\<\;\>\;/g; $value =~ s///g; } $FORM{$name}=$value; } $pos1=$pos3+length("\r\n$delimiter"); if(substr($read_data, $pos1, 4) eq "--\r\n"){last;} else{$pos1+=2; if($max_count++ > 20){last;} next;} } }else{ 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'h2z_sjis(*value); &jcode'convert(*value,'sjis'); if ($tag == 0) { $value =~ s/&/&\;/g; $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; } else { $value =~ s/<>/\<\;\>\;/g; $value =~ s///g; } $FORM{$name} = $value; if(@NW){ foreach (0..$#NW){ if(index($value,$NW[$_]) >= 0){ $NW[$_]=~ s//\>\;/g; &er_("「$NW[$_]」は使用できません!"); } } } if ($name eq 'del') { push(@d_,$value); } if ($name eq 'ENT') { push(@E_,$value); } } } $d_may= $FORM{'d_may'}; $name = $FORM{'name'}; $comment=$FORM{'comment'};$comment=~ s/\r\n/
    /g;$comment=~ s/\r|\n/
    /g; $email= $FORM{'email'}; $url = $FORM{'url'};$url =~ s/^http\:\/\///; $mode = $FORM{'mode'}; $font = $FORM{'font'}; $kiji = $FORM{'kiji'}; $namber=$FORM{'namber'}; $type = $FORM{'type'}; $delkey=$FORM{"delkey"}; $mo =$FORM{"mo"}; $hr =$FORM{"hr"}; $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); $year=$year+1900; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year\/$mon\/$mday\($week\) $hour\:$min\:$sec"; } # # [クッキー発行] # sub set_ { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*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\,min\:$FORM{'min'}\,font\:$font<>$hr\,delkey\:$delkey"; print "Set-Cookie: UPP=$cook; expires=$date_gmt\n"; } # # [クッキー取得] # sub get_ { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'UPP'}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_email= $COOKIE{'email'}; $c_url = $COOKIE{'url'}; if($FORM{"min"} eq ""){$FORM{"min"}=$COOKIE{'min'};} ($c_font,$c_B)=split(/<>/,$COOKIE{'font'}); $c_key = $COOKIE{'delkey'}; if($FORM{'name'}) {$c_name =$FORM{'name'}; } if($FORM{'email'}) {$c_email=$FORM{'email'}; } if($FORM{'url'}) {$c_url =$url; } if($FORM{'font'}) {$c_font =$FORM{'font'}; } if($FORM{'hr'}) {$c_B =$FORM{'hr'};} if($FORM{'delkey'}){$c_key = $FORM{'delkey'}; } } # # [管理用ページ] # sub del_ { if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");} &hed_("Edit"); print <<"_HTML_"; □ BACK
    管理モード
    _HTML_ open(DB,"$log"); @lines = ; close(DB); @NEW=(); @RES=(); foreach (0 .. $#lines) { ($namber,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type) = split(/<>/,$lines[$_]); if($type){unshift(@RES,$lines[$_]);}else{push(@NEW,$lines[$_]);} } @lines=(); if(-s $log){$l_size = -s $log;}else{$l_size = 0;} print <<"_HTML_"; 現在のログのサイズ:$l_size バイト
    ■ 記事を編集したい場合、その記事のタイトルをクリック。
    ■ 削除したい記事にチェックを入れ「削除」ボタンを押す。
    ■ 名前の下の数字は IPアドレス です。
    □ 親記事を削除するとレス記事、アップファイルもすべて削除されます。
    $msg
    _HTML_ $total=@NEW; $page_=int(($total-1)/$a_max); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @NEW - 1; $page_end = $page + ($a_max - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type,$delkey,$ip,$Ent)=split(/<>/,$NEW[$_]); $type =~ s/\n/0/g;$delkey =~ s/\n//g;$ip =~ s/\n//g; $comment =~ s/
    / /g; if($tag){ $comment =~ s//>/g; } if(length($comment) > 80){$comment=substr($comment,0,78); $comment=$comment . '..'; } if($email ne ""){$name = "$name";} print <<"_HTML_"; _HTML_ foreach $lines(@RES) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom, $rurl,$rfont,$rico,$rtype,$rd,$rip) = split(/<>/,$lines); $rtype =~ s/\n/0/g;$rd =~ s/\n//g;$rip =~ s/\n//g; $resmsg= "
    ($rtypeのレス)"; if ($namber eq "$rtype"){ $rcom =~ s/
    / /g; if ($tag) { $rcom =~ s//>/g; } if(length($rcom) > 60){$rcom=substr($rcom,0,58); $rcom = $rcom . '..';} if ($rmail ne "") { $rname="$rname"; } print <<"_HTML_"; _HTML_ } } } print "
    チェック記事NO タイトル投稿者コメント
    親記事[$namber] $d_may $name
    $ip
    $comment
    [$rnam]$resmsg $rd_may $rname
    $rip
    $rcom

    \n"; print "
    \n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if ($back_line >= 0) { print <<"_BACK_"; _BACK_ } if ($page_end ne $end_data) { print <<"_NEXT_"; _NEXT_ } print "
    全ページ数 / \n"; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i eq $af){ print "[$i] \n";} else{print "[$i]\n";} $a+=$a_max; } print"
    \n"; if($bup){ if(-e $bup_f){$bl=int(-M $bup_f); $bs=-s $bup_f; $bc="$bs バイト、$bl 日前のBackUpあり。";} else{$bc="BackUpはありません。";} print <<"_BUP_";
    $bc

    _BUP_ } if($oyaup){print"
    [親記事投稿フォーム]

    ";&get_;&form;} print <<"_HTML_";

    ファイル表\示許可設定

    _HTML_ &foot_; } # # [記事編集] # sub hen_ { if($mo eq ""){ if ($FORM{'del'} eq "") { &er_("登録NO が未入力!"); } if ($delkey eq "") { &er_("削除キー が未入力!"); } $kiji=$FORM{'del'}; }elsif($mo==1){if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); }} open(DB,"$log"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { ($namber,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type,$epasswd,$ip) = split(/<>/,$line); if ($kiji eq "$namber") { if($mo eq ""){ if($epasswd eq ""){&er_("この記事は削除キーが存在しません!");} &cryma_($epasswd); if($ok eq "n"){&er_("パスワードが違います!");} $hen_l="$cgi_f"; }else{$hen_l="$cgi_f?mode=del&pass=$FORM{'pass'}";} if($FORM{'pass'} eq ""){$FORM{'pass'}=$delkey;} $type =~ s/\n/0/g;$delkey=~ s/\n//g; &hed_("Comment Edit"); $comment=~ s/
    /\n/g; if($tag){$comment =~ s//>/g;} if($type && $res_f==0){$fom="";} else{$fom="";} if($type==0){($font,$hr)=split(/;/,$font);} print <<"_HTML_"; □ BACK
    記事ナンバー[$namber] の編集

    *) 画像の編集はできません! 画像削除をしたい場合、記事を削除して画像削除して下さい。
      Name/
      E-Mail/
      Title/
      URL/
      Comment▽
      $fom
      文字色/ _HTML_ foreach(0 .. $#fonts){ if($font eq ""){$font="$fonts[0]";} print"\n";} else{print"$fonts[$_]\">\n";} } if($type==0){ print"
      枠線色/\n"; foreach (0 .. $#hr) { if($hr eq ""){$hr="$hr[0]";} print"\n";} else{print"$hr[$_]\">\n";} } } print <<"_EDIT_";
    _EDIT_ &foot_; } } } # # [パスワード暗号化] # sub cry_ { $time = time; ($p1, $p2) = unpack("C2", $time); $wk = $time / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$time % 64]; $epasswd = crypt($FORM{'delkey'}, $nsalt); } # # [パスワード解読] # sub cryma_ { if($epasswd =~ /^\$1\$/){ $crptkey = 3; }else{ $crptkey = 0; } $ok = "n"; if (crypt($FORM{'delkey'}, substr($epasswd,$crptkey,2)) eq $epasswd) {$ok = "y";} } # # [削除処理] # sub key_ { if($mo eq ""){ if($FORM{'del'} eq ""){&er_("登録NO が未入力!");} if($delkey eq ""){&er_("削除キー が未入力!");} }elsif($mo==1){if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); }} open(DB,"$log") || &er_("Can't open $log"); @mens = ; close(DB); @CAS=(); $I=0; foreach $mens (@mens) { $mens =~ s/\n//g; ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$epasswd,$ip) = split(/<>/,$mens); $type=~ s/\n/0/g; $epasswd=~ s/\n//g; $ip=~ s/\n//g; foreach $namber (@d_) { if ($namber eq "$nam"||$namber eq "$ty") { if($mo eq "" && $namber eq "$nam"){ if($epasswd eq ""){&er_("この記事は削除キーが存在しません!");} &cryma_($epasswd); if($ok eq "n"){ &er_("パスワードが違います!"); } } $mens=""; if(-e "$i_dir/$i"){unlink("$i_dir/$i");} } } $n="\n"; if($mens eq ""){ $mens=""; $n=""; if($I==0){$mens="$nam<><><><><><><><><>$nam<><><><>"; $n="\n";} } $I=1; push (@CAS,"$mens$n"); } open (DB,">$log"); print DB @CAS; close(DB); if($mo){$msg="

    削除完了

    "; &del_;}else{$Henko="

    削除完了

    "; &html_;} } # # [編集記事置換] # sub h_w_ { if($mo){if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");}} open(DB,"$log"); @lines = ; close(DB); @new=(); $flag=0; foreach $line (@lines) { $line=~ s/\n//g; ($knam,$kda,$kn,$kem,$kd_m,$kcom, $kurl,$kf,$kico,$kt,$kd,$kip,$E)=split(/<>/,$line); if($namber eq "$knam") { if($mo eq ""){ $epasswd=$kd; $FORM{"delkey"}=$FORM{"pass"}; if($epasswd eq "") {&er_("この記事は削除キーが存在しません!");} &cryma_($epasswd); if($ok eq "n"){&er_("パスワードが違います!");} } if($kt==0){$font="$font\;$hr";} $line="$namber<>$kda<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$kico<>$kt<>$kd<>$kip<>$E<>"; $flag=1; }elsif(@E_){ $EF=0; foreach $ENT (@E_){if($ENT eq $knam){$EF=1; if($E){$EE=0;}else{$EE=1;} last;}} if($EF){ $line="$knam<>$kda<>$kn<>$kem<>$kd_m<>$kcom<>$kurl<>$kf<>$kico<>$kt<>$kd<>$kip<>$EE<>"; $flag=1; } } push(@new,"$line\n"); } if($flag == 0){&er_("編集記事ナンバーが不正です。");} if($flag == 1){ open (DB,">$log"); print DB @new; close(DB); } if(@E_){&ent_;} if($mo){$msg="

    編集完了

    ";&del_;}else{&html_;} } # # [ロック処理] # sub lock_ { $lflag = 0; foreach (1 .. 5) {if(mkdir($_[0], 0755)){$lflag=1; last;}else{sleep(1);}} if ($lflag == 0) { if(-e $_[0]){rmdir($_[0]);} &er_("LOCK is BUSY (ロック中)","1"); } } # # [メール通知処理] # sub mail_ { $mail_subj = "$title の投稿通知"; if($type != 0 && $type ne ""){ $types = "($type Res)"; } if($email eq ""){ $email='nomail@xxx.xxx'; } if($url ne "") { $url ="URL : http://$url"; } if($d_may eq ""){ $d_may="No Title"; } $Mail_Msg=<<"_MAIL_"; $mail_subj --Comment------------------------------ Title: $d_may $types Name : $name ($email) Time : $date $url $comment ----------------------------------END-- _MAIL_ $Mail_Msg=~ s/
    /\n/g; $Mail_Msg=~ s/\<\;//g; $Mail_Msg=~ s/\"\;/\"/g; $Mail_Msg=~ s/\&\;/&/g; &jcode'convert(*mail_subj,'jis'); &jcode'convert(*Mail_Msg,'jis'); if(open(MAIL,"| $s_mail $mailto")) { print MAIL "X-Mailer: UPP MAILER\n"; print MAIL "To: $mailto\n"; print MAIL "From: $email\n"; print MAIL "Subject: $mail_subj\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "\n\n"; print MAIL "$Mail_Msg\n"; close(MAIL); } } # # [URLリンク] # sub auto_ { $_[0]=~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1$2<\/a>/g; } # # [カウンタ処理] # sub con_ { if($locks){&lock_("$c_loc");} open(NO,"$c_f") || &er_("Can't open $c_f",'1'); $cnt = ; close(NO); if($FORM{'mode'} eq "" && $FORM{'page'} eq "" && $ENV{'HTTP_REFERER'} !~ /$cgi_f/) { $cnt++; open(NO,">$c_f") || &er_("Can't write $c_f","1"); print NO $cnt; close(NO); } if(-e $c_loc){rmdir($c_loc);} while(length($cnt) < $fig){ $cnt = 0 . $cnt; } @cnts = split(//,$cnt); print "
    \n"; if($m_pas){ foreach(0 .. $#cnts){print"";} } else {print "$cnt";} print "


    \n"; } # # [エラー表示] # sub er_ { if(-e $lockf){rmdir($lockf);} if(-e $c_loc){rmdir($c_loc);} if(-e "$i_dir/$file"){unlink("$i_dir/$file");} &hed_("Error"); print "
    ERROR - $_[0]

    \n"; &foot_; } # # [過去ログ] # sub log_ { open(NO,"$klog_c") || &er_("Can't open $klog_c"); $n = ; close(NO); $klog_f="$klog_d\/$n\.txt"; unless(-e $klog_f) { &log_n; } $klog_size=$klog_l*1024; if(-s $klog_f > $klog_size) {&log_up;} open(LOG,">>$klog_f") || &er_("Can't write $klog_f"); print LOG @KLOG; close(LOG); } # # [カウントアップ] # sub log_up { $n++; open(NUM,">$klog_c") || &er_("Can't write $klog_c"); print NUM "$n"; close(NUM); $klog_f = "$klog_d\/$n\.txt"; &log_n; } # # [過去ログ生成] # sub log_n { $new_flag = 1; open(DB,">$klog_f") || &er_("Can't write $klog_f"); print DB ""; close(DB); chmod(0666,"$klog_f"); } # # [バックアップ処理] # sub backup_{ unless(-e $bup_f) { $klog_f=$bup_f;&log_n; } open(LOG,">$bup_f") || &er_("Can't write $bup_f"); print LOG @lines; close(LOG); } # # [修復処理] # sub bma_ { if(-e $lockf){rmdir($lockf);} rename ($bup_f,$log) || &er_("Rename Error"); $msg="

    修復完了

    "; &del_; } # # [許可システム] # sub ent_ { if($FORM{'pass'} ne "$pass"){&er_("パスワードが違います!");} &hed_("Permit"); print <<"_ENT_"; □
    掲示板に戻る
    ファイル表\示許可

    □ 許可する/未許可にするファイルをチェックし、ボタンを押して下さい。
      _ENT_ open(LOG,"$log") || &er_("Can't open $log"); @lines = ; close(LOG); @NEW=(); foreach (0 .. $#lines) { ($namber,$date,$name,$email,$d_may,$com, $url,$font,$ico,$type) = split(/<>/,$lines[$_]); if($type==0){push(@NEW,$lines[$_]);} } @lines=(); foreach $line (@NEW) { ($nam,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type,$Del,$Ip,$Ent) = split(/<>/,$line); if($ico){ if($Ent){$eok="許可";}else{$eok="未許可";} if($email){$name="$name";} if($url){$url="/HP";} if(-s "$i_dir/$ico"){$Size = -s "$i_dir/$ico";}else{$Size = 0;} $comment =~ s/
      / /g; if($tag){ $comment =~ s//>/g; } if(length($comment) > 80){$comment=substr($comment,0,78); $comment=$comment . '..';} print <<"_ENT_"; -[$nam] $name ($Ip$url/$date) => $ico ($Size\Bytes) $eok
        $comment
      _ENT_ }else{next;} } print "

    \n"; &foot_; } # # [フォーム] # sub form { print<<"_HTML_";
    _HTML_ if($oyaup){print"";} if ($i_mode == 1) { print <<"_HTML_";
    Name / E-Mail /
    Title/ 削除キー/ (半角8文字以内)
    Comment/ (適当に改行を入れて下さい)
      
    URL /
    File/
    アップ可能\拡張子=> _HTML_ $I=0; foreach (0..$#exn) { if($exi[$I] eq "img"){$EX="$exn[$_]";}else{$EX="$exn[$_]";} print"/$EX"; $I++; } print<<"_M_";
    *1)太字の拡張子は画像として認識されます。
    *2)画像は初期状態で縮小サイズ$H×$Wピクセル以下で表\示されます。
    *3)同じ名前のファイルがある場合はファイル名は変更されます。
      ファイル名に英数字 アンダーバー(_) ハイフン(-) 以外がある場合も同様です。
    *4)アップ可能\ファイルサイズは$max_fs\KB(1KBytes=1024Bytes)までです。 _M_ } print"
    文字色/"; foreach (0 .. $#fonts) { if($c_font eq ""){$c_font = "$fonts[0]";} print"\n";} else{print"$fonts[$_]\">\n";} } print"
    枠線色/"; foreach (0 .. $#hr) { if($c_B eq ""){$c_B="$hr[0]";} print "\n";} else{print"$hr[$_]\">\n";} } print <<"_KEY_";

    _KEY_ } # # [画像幅取得] # とほほのラウンジ参考 => http://tohoho.wakusei.ne.jp/ sub size { $Cg=1; $Wn=$W; $Hn=$H; $IW=0; $IH=0; if($ico=~/.gif$|.GIF$/){ #GIF open(GIF,"$i_dir/$ico"); binmode(GIF); seek(GIF,6,0); read(GIF,$size,4); close(GIF); ($IW,$IH)=unpack("vv",$size); }elsif($ico=~/.png$|.PNG$/){ #PNG open(PNG,"$i_dir/$ico"); binmode(PNG); seek(PNG,16,0); read(PNG,$Pw,4); read(PNG,$Ph,4); close(PNG); $PW=unpack("H*",$Pw);$IW=hex($PW); $PH=unpack("H*",$Ph);$IH=hex($PH); }elsif($ico=~/.jpg$|.JPG$|.jpeg$|.JPEG$/){ #JPEG open(JPG,"$i_dir/$ico"); binmode(JPG); read(JPG,$Top,2); while (JPG) { read(JPG,$Top,4); ($mark,$Cell,$Lar)=unpack("aan",$Top); if($mark ne "\xFF"){ $IW=0; $IH=0; last; }elsif((ord($Cell) >= 0xC0) && (ord($Cell) <= 0xC3)){ read(JPG,$Top,5); ($IH, $IW)=unpack("xn2",$Top); last; }else{read(JPG,$Top,($Lar-2));} } close(JPG); }elsif($ico=~/.bmp$|.BMP$/){ #BMP open(BMP,"$i_dir/$ico"); binmode(BMP); seek(BMP,18,0); read(BMP,$size,8); close(BMP); ($IW,$IH)=unpack("V2",$size); } if($IW && $IH){ if($IW > $Wn){$IK=$Wn*$IH;$kH=int($IK/$IW);$kW=$Wn;$Cg=0;} if($Cg && $IH > $Hn){$IK=$Hn*$IW;$kW=int($IK/$IH);$kH=$Hn;$Cg=0;} elsif($Cg==0 && $kH > $Hn){$IK=$Hn*$kW;$kW=int($IK/$kH);$kH=$Hn;} print"$IW×$IH"; if($Cg){$kW=$IW;$kH=$IH;} else{print" =\>\; $kW×$kH";} print"
    \n"; }else{$kW=$W;$kH=$H;} } # # [ランキング] # sub rank { open(IN,"$RLOG") || &er_("$RLOG"); @R = ; close(IN); $flag=0; @N=(); $T=time; $Wri=0; foreach $R (@R) { ($Na,$Co,$Em,$Time)=split(/<>/,$R); if($Na eq "$name"){$flag=1; $Co++; $R="$Na<>$Co<><>$T<>\n";} if(($T-$Time) > $RDEL*86400){$R=""; $Wri=1;} push(@N,$R); } if ($flag == 1 || $Wri) { open(OUT,">$RLOG") || &er_("$RLOG"); print OUT @N; close(OUT); } if ($flag == 0) { open(OUT,">>$RLOG") || &er_("$RLOG"); print OUT "$name<>1<><>$T<>\n"; close(OUT); } } # # [ランク表示] # sub ran_ { open(R,"$RLOG") || &er_("Can't open $RLOG"); @RA = ; close(R); @R=(); foreach $RA (@RA) { ($Na,$Co,$Em,$Ti)=split(/<>/,$RA); if(@d_){ if($FORM{'pass'} ne $pass){&er_("パスワードが違います!");} foreach $D (@d_){if($D eq $Na){$RA=""; last;}} if($RA eq ""){next;}else{push(@R,"$RA");} } $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($Ti); $year=$year+1900; $mon++; $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $Date = "$year\/$mon\/$mday\($week\)"; $total+= $Co; $Co{$Na} = $Co; $Date{$Na}=$Date; } if(@R){ open(OUT,">$RLOG") || &er_("$RLOG"); print OUT @R; close(OUT); } &hed_("Rank"); print <<"_T_"; □BACK
    発言ランキング

    集計発言数:$total回

    BEST 10 _T_ $J=0; $rank1=0; $rank2=1; $count_tmp=0; $K=0; foreach (sort { ($Co{$b} <=> $Co{$a}) || ($a cmp $b)} keys(%Co)) { ($Co{$_} == $count_tmp) || ($rank1 = $rank2); $P{$_}=($Co{$_} / $total) * 100; $P{$_}=sprintf("%2.1f",$P{$_}); if($rank1 > 10 && $J==0){ $J=1; print"
    順位名前発言回数最終発言日グラフ*


    11位〜$RBEST位\n"; print""; } if($J && $rank1 > $RBEST){last;} if($rank1==1){$G=$P{$_};$G{$_}=50;}else{$G{$_}=int(($P{$_}*50)/$G);} print"\n"; $count_tmp=$Co{$_}; $rank2++; } print<<"_F_";
    順位名前発言回数最終発言日グラフ*
    $rank1$_$Co{$_}$Date{$_}"; print "l" x $G{$_}; print" $P{$_}\%

    *マーク削除/Pass
    _F_ &foot_; }