#!/usr/bin/perl ### read.cgi ver 2.05 (2001/08/22) editted (2001/08/27) ### onpuch original (2003/03/19) version (2004/05/15) # ----------------------------------------------------------- use strict; require 'jcode.pl'; use CGI::Carp qw/fatalsToBrowser/; use vars qw($hannyou); use vars qw($hyoujun); use vars qw($ver); use vars qw($gzip_path); use vars qw($gzip_enable); $hyoujun = "http://suika.fam.cx".$ENV{'REQUEST_URI'}; $hyoujun =~ s/\/test\/.*/\/test\//g; # このままの設定で動作しない場合は、↓の#を取って正確なベースURLを書く。例:http://pc.2ch.net/test/ #$hyoujun = 'http://onpumoe.hp.infoseek.co.jp/cgi-bin/test/'; $ver='read.cgi ver4.20 by GlobalNoteScript (2004/09/05)'; $gzip_path = "/bin/gzip"; $gzip_enable = 1; #================================================== # 初期情報の取得(POST) #================================================== { use vars qw(%FORM); my ($buffer, @pairs, $name, $value, $path_info, $res, $ls); $path_info = $ENV{'PATH_INFO'}; # if ($ENV{'REQUEST_METHOD'} eq "GET") { if ($ENV{'PATH_INFO'} eq "") { $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split /=/; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg; $FORM{$name} = $value; } } else { ($FORM{dummy},$FORM{bbs},$FORM{key},$res,$ls) = split /\//, $path_info; if ($res =~ /-/) { ($FORM{st}, $FORM{to}) = split /-/, $res; } else { $FORM{st} = $res; $FORM{to} = $res; } if ($res =~ /n/) { $FORM{nofirst} = "true"; $FORM{st} =~ s/n//g; $FORM{to} =~ s/n//g; } else { $FORM{nofirst} = "false"; } if ($res =~ /l/) { $ls = $FORM{to}; $ls =~ s/l//g; $ls =~ s/n//g; $ls =~ s/i//g; $FORM{ls} = $ls; $FORM{st} = ""; $FORM{to} = ""; } # if ($res =~ /i/) { if (($ENV{'HTTP_USER_AGENT'} =~ /DoCoMo\//) && ($res =~ /i/)) { $FORM{imode} = "true"; $FORM{nofirst} = "true"; } $FORM{to} =~ s/i//g; $FORM{to} =~ s/n//g; } } #================================================== # エラーレスポンス(BBS情報) #================================================== { if(!-e "../$FORM{'bbs'}/dat/$FORM{'key'}.dat" || $FORM{'bbs'} =~ /(\.|\/)/){ DispError("そんな板orスレッドないです。"); } if(-s "../$FORM{'bbs'}/dat/$FORM{'key'}.dat" > 550000) { DispError("このスレッド大きすぎます。"); } } #================================================== # 初期情報の取得(設定ファイル) #================================================== { use vars qw(%SETTING); # 設定ファイルを読む my ($m_pass,$m_key,$m_value); $m_pass = "../$FORM{'bbs'}/SETTING.TXT"; if(-e $m_pass){ open(FILE,$m_pass); foreach (){ chop; ($m_key,$m_value) = split /=/; $SETTING{$m_key} = $m_value; } close(FILE); }else{ # 設定ファイルがない(ERROR) DispError("ユーザー設定が消失しています!"); } # 欠落情報の補完 unless($SETTING{"BBS_THREAD_COLOR"}) {$SETTING{"BBS_THREAD_COLOR"}="#EFEFEF";} unless($SETTING{"BBS_SUBJECT_COLOR"}) {$SETTING{"BBS_SUBJECT_COLOR"}="#FF0000";} unless($SETTING{"BBS_NAME_COLOR"}) {$SETTING{"BBS_NAME_COLOR"}="forestgreen";} unless($SETTING{"BBS_TEXT_COLOR"}) {$SETTING{"BBS_TEXT_COLOR"}="#000000";} unless($SETTING{"BBS_LINK_COLOR"}) {$SETTING{"BBS_LINK_COLOR"}="#0000FF";} unless($SETTING{"BBS_ALINK_COLOR"}) {$SETTING{"BBS_ALINK_COLOR"}="#FF0000";} unless($SETTING{"BBS_VLINK_COLOR"}) {$SETTING{"BBS_VLINK_COLOR"}="#660099";} $SETTING{"BBS_BG_COLOR"}=$SETTING{'BBS_THREAD_COLOR'}; $gzip_path = $SETTING{"BBS_GZIP_PATH"}; if ($SETTING{"BBS_GZIP_CHECK"} eq "checked") { $gzip_enable = 1; } else { $gzip_enable = 0; } } #================================================== # 変数の設定 #================================================== { use vars qw($start); use vars qw($end); use vars qw($NOW); use vars qw(@LOG); $NOW=time; open(ALL,"../$FORM{'bbs'}/dat/$FORM{'key'}.dat"); @LOG=; close(ALL); my $LINENUM = @LOG; if ($FORM{'st'}) { $start = $FORM{'st'}; } elsif ($FORM{'ls'}) { $start = $LINENUM - $FORM{'ls'} + 1; } else { $start=1; } if ($start < 1) {$start = 1;} if ($FORM{'to'}) { $end = $FORM{'to'} + 1; } else { $end = $LINENUM + 1; } if ($end - $start < 1) {$end = $start + 1;} my $st1 = $start - 100; if ($st1 <= 0) {$st1 = 1;} my $st2 = $start - 1; my $st3 = $end; my $st4 = $end + 99; if ($st4 > $LINENUM) {$st4 = $LINENUM;} my $st5 = $LINENUM; my $res1 = $st2 - $st1 + 1; my $res2 = $st4 - $st3 + 1; my $subject=(split /<>/,$LOG[0])[4]; my ($name,$mail,$time,$message,$mailto); if(!$FORM{'imode'}){ print "Content-type: text/html; charset=shift_jis\n"; if ( $gzip_enable ){ if ( $ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/ ){ print "Content-encoding: x-gzip\n\n"; } elsif ( $ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/ ){ print "Content-encoding: gzip\n\n"; } else { print "\n"; $gzip_enable = 0; } } else { print "\n"; } open(STDOUT,"| $gzip_path -1 -c") if $gzip_enable; print < $subject ■掲示板に戻る■ 全部 EOF my $hundred = int ($LINENUM / 100); for (my $i = 0; $i <= $hundred; $i++) { my $hndst = $i * 100 + 1; my $hndto = $i * 100 + 100; if ($hndst == $LINENUM) { print <$hndst EOF } elsif ($hndto > $LINENUM) { $hndto = $LINENUM; print <$hndst-$hndto EOF } else { print <$hndst- EOF } } if ($st2 > 0) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st1-$st2" . "n" ; print <前$res1 EOF } if ($st3 - $LINENUM < 1) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st3-$st4" . "n" ; print <次$res2 EOF } else { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st5" . "n-" ; print <新着レス EOF } print <最新50 EOF my $size = int ((-s "../$FORM{'bbs'}/dat/$FORM{'key'}.dat") / 1024); if ($LINENUM >= $SETTING{'BBS_MAX_RES_COUNT'}){ my $maxres = $SETTING{'BBS_MAX_RES_COUNT'}; print <

レス数が $maxres を超えています。残念ながらこのスレッドには書き込めません。

EOF }elsif (($LINENUM >= ($SETTING{'BBS_MAX_RES_COUNT'} - 50)) && ($SETTING{'BBS_MAX_RES_COUNT'} >= 50)){ my $maxres = $SETTING{'BBS_MAX_RES_COUNT'}; my $rescount = $maxres - 50; print <
レス数が $rescount を超えています。$maxresを超えると書き込めなくなるよ。
EOF }elsif (($LINENUM >= ($SETTING{'BBS_MAX_RES_COUNT'} - 100)) && ($SETTING{'BBS_MAX_RES_COUNT'} >= 100)){ my $maxres = $SETTING{'BBS_MAX_RES_COUNT'}; my $rescount = $maxres - 100; print <
レス数が $rescount を超えています。$maxresを超えると書き込めなくなるよ。
EOF }elsif ($size >= $SETTING{'BBS_MAX_RES_SIZE'}) { my $maxkb = $SETTING{'BBS_MAX_RES_SIZE'} . "KB"; print <

スレッドの大きさが $maxkb を超えています。残念ながらこのスレッドには書き込めません。

EOF }elsif (($size >= ($SETTING{'BBS_MAX_RES_SIZE'} - 20)) && ($SETTING{'BBS_MAX_RES_SIZE'} >= 20)) { my $maxkb = $SETTING{'BBS_MAX_RES_SIZE'} . "KB"; my $maxsize = $SETTING{'BBS_MAX_RES_SIZE'} - 20; my $sizekb = $maxsize . "KB"; print <
スレッドの大きさが $sizekb を超えています。$maxkbを超えると書き込めなくなるよ。
EOF }elsif (($size >= ($SETTING{'BBS_MAX_RES_SIZE'} - 50)) && ($SETTING{'BBS_MAX_RES_SIZE'} >= 50)) { my $maxkb = $SETTING{'BBS_MAX_RES_SIZE'} . "KB"; my $maxsize = $SETTING{'BBS_MAX_RES_SIZE'} - 50; my $sizekb = $maxsize . "KB"; print <
スレッドの大きさが $sizekb を超えています。$maxkbを超えると書き込めなくなるよ。
EOF } print < $subject
EOF if($FORM{'nofirst'} ne "true" || $FORM{'st'} eq 1){ chop($LOG[0]); ($name,$mail,$time,$message,$subject) = split(/<>/,$LOG[0]); #本文が空の場合 if ($message eq "") { $name=""; $mail=""; $time="[ここ壊れてます]"; $message="[ここ壊れてます]"; } my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1$2\:$3<\/a>/igo; # 末尾にsjisの1バイト目があったら削る my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; my $check2 = '[\201-\237\340-\374]'; $mail =~ s/($check1)$check2$/$1/g; $name =~ s/($check1)$check2$/$1/g; if($mail){ $mailto = "$name"; }else{ $mailto = "$name"; } print "
1 名前:$mailto 投稿日:$time
$message

\n"; if($start eq 1){$start++;} } while($start != $end){ unless($LOG[$start-1]){last;} chop($LOG[$start-1]); ($name,$mail,$time,$message,$subject) = split(/<>/,$LOG[$start-1]); #本文が空の場合 if ($message eq "") { $name=""; $mail=""; $time="[ここ壊れてます]"; $message="[ここ壊れてます]"; } my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1$2\:$3<\/a>/igo; # 末尾にsjisの1バイト目があったら削る my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; my $check2 = '[\201-\237\340-\374]'; $mail =~ s/($check1)$check2$/$1/g; $name =~ s/($check1)$check2$/$1/g; if($mail){ $mailto = "$name"; }else{ $mailto = "$name"; } print "
$start 名前:$mailto 投稿日:$time
$message

\n"; $start++; } my $newres = $LINENUM + 1; print <$size KB
掲示板に戻る 全部 EOF for (my $i = 0; $i <= $hundred; $i++) { my $hndst = $i * 100 + 1; my $hndto = $i * 100 + 100; if ($hndst == $LINENUM) { print <$hndst EOF } elsif ($hndto > $LINENUM) { $hndto = $LINENUM; print <$hndst-$hndto EOF } else { print <$hndst- EOF } } if ($st2 > 0) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st1-$st2" . "n" ; print <前$res1 EOF } if ($st3 - $LINENUM < 1) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st3-$st4" . "n" ; print <次$res2 EOF } else { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st5" . "n-" ; print <新着レス EOF } print <最新50
EOF if (($LINENUM < $SETTING{'BBS_MAX_RES_COUNT'}) && ($size < $SETTING{'BBS_MAX_RES_SIZE'})){ print <
名前: E-mail(省略可)
EOF } print < EOF close(STDOUT) if $gzip_enable; }else{ #================================================== # i-mode用 #================================================== if ($FORM{'st'} eq '' && $FORM{'to'} eq '' && $FORM{'ls'} eq '') { $start = $LINENUM - 4; if ($start < 1) {$start = 1;} $end = $LINENUM + 1; } if ($end - $start > 5) {$end = $start + 5;} if ($LINENUM => $start && $end - $LINENUM > 1) {$end = $LINENUM + 1;} my $st1 = $start - 5; if ($st1 <= 0) {$st1 = 1;} my $st2 = $start - 1; my $st3 = $end; my $st4 = $end + 4; if ($st4 > $LINENUM) {$st4 = $LINENUM;} my $st5 = $LINENUM; my $res1 = $st2 - $st1 + 1; my $res2 = $st4 - $st3 + 1; # 全角カナと半角カナの変換 &jcode::z2h_sjis(\$subject); foreach (@LOG) { &jcode::z2h_sjis(\$_); } print "Content-type: text/html; charset=shift_jis\n\n"; print < $subject 掲示板に戻る 最初- EOF if ($st2 > 0) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st1-$st2" . "ni"; print <前$res1 EOF } if ($st3 - $LINENUM < 1) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st3-$st4" . "ni"; print <次$res2 EOF } else { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st5" . "-ni"; print <新着 EOF } print <最新5

$subject
EOF if($FORM{'nofirst'} ne "true" || $FORM{'st'} eq 1){ chop($LOG[0]); ($name,$mail,$time,$message,$subject) = split(/<>/,$LOG[0]); #本文が空の場合 if ($message eq "") { $name=""; $mail=""; $time="[ここ壊れてます]"; $message="[ここ壊れてます]"; } # URLを変換(onpuch.jp以外のURLはリンクせず) my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1$2\:$3<\/r>/igo; $message =~ s/(http\:\/\/www\.onpuch\.jp[\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)<\/r>/$1<\/a>/igo; $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)<\/r>/(URL)/igo; $message =~ s/($name"; }else{ $mailto = "$name"; } print "

[1:$mailto($time)]
$message


\n"; if($start eq 1){$start++;} } while($start != $end){ unless($LOG[$start-1]){last;} chop($LOG[$start-1]); ($name,$mail,$time,$message,$subject) = split(/<>/,$LOG[$start-1]); #本文が空の場合 if ($message eq "") { $name=""; $mail=""; $time="[ここ壊れてます]"; $message="[ここ壊れてます]"; } # URLを変換(onpuch.jp以外のURLはリンクせず) my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*'; $message =~ s/($check)(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1$2\:$3<\/r>/igo; $message =~ s/(http\:\/\/www\.onpuch\.jp[\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)<\/r>/$1<\/a>/igo; $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)<\/r>/(URL)/igo; $message =~ s/($name"; }else{ $mailto = "$name"; } print "

[$start:$mailto($time)]
$message


\n"; $start++; } #my $FL=1; #if($FORM{'ls'} || $end > 1001 || $end > @LOG-1){$FL=0} #if($FL){ print <掲示板に戻る 最初- EOF if ($st2 > 0) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st1-$st2" . "ni"; print <前$res1 EOF } if ($st3 - $LINENUM < 1) { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st3-$st4" . "ni"; print <次$res2 EOF } else { $hannyou = "./read.cgi/$FORM{'bbs'}/$FORM{'key'}/$st5" . "-ni"; print <新着 EOF } print <最新5
EOF #} print "
\n"; print " "; print "NAME:"; print "MAIL:"; print "
"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "

$ver"; print ""; print ""; exit; } } #エラー画面(エラー処理) #DispError(TITLE,TOPIC); sub DispError{ my ($topic)=@_; print "Content-type: text/html; charset=shift_jis\n\n"; #----------------------------------------------------------------------- print < $topic

$topic

1 名前:$ver投稿日:2001/04/12(木) 15:11
$topic



$ver

EOF my $datn = substr($FORM{'key'},0,3); if (-e "../$FORM{'bbs'}/kako/$FORM{'key'}.html"){ print "隊長! 過去ログ倉庫で、スレッド $FORM{'key'}.html を発見しました。\n"; }elsif (-e "../$FORM{'bbs'}/kako/$datn/$FORM{'key'}.dat"){ print "隊長! 過去ログ倉庫で、スレッド $FORM{'key'}.dat を発見しました。
、しかしまだ html化されていません。残念、待つしかない。\n"; }else{ print "過去ログ倉庫にもありませんでした。
問い合わせても見つかる可能\性はほとんどありません。\n"; } print < EOF exit; }