require './jacode.pl'; #------------------------------------------ $ver="Child Search v8.92";# (ツリー式掲示板) #------------------------------------------ # Copyright(C) りゅういち # E-Mail:ryu@cj-c.com # W W W :http://www.cj-c.com/ #------------------------------------------ #---[設定ファイル]------------------------- # 同じようにいくつでも増やせます。 # [ ]内の数字を使いCGIにアクセスするとその設定ファイルで動作します。 # $set[12] の設定ファイルを使う場合: http://www.---.com/cgi-bin/srch.cgi?no=12 $set[0]="./set.cgi"; $set[1]="./set1.cgi"; $set[2]="./set2.cgi"; $set[3]="./set3.cgi"; $set[4]="./set4.cgi"; $set[5]="./set5.cgi"; $set[6]="./set6.cgi"; # ---[設定ここまで]-------------------------------------------------------------------------------------------------- &d_code_; if($no eq ""){$no=0;} if($set[$no]){unless(-e $set[$no]){&er_('設定ファイルが無いです!');}else{$SetUpFile="$set[$no]"; require"$SetUpFile";}} else{&er_('設定ファイルがCGIに設定されてません!');} # ---[フォームスタイルシート設定等]---------------------------------------------------------------------------------- $ag=$ENV{'HTTP_USER_AGENT'}; if($fss && $ag =~ /IE|Netscape6/){ $fm=" onmouseover=\"this.style.$on\" onmouseout=\"this.style.$off\""; $ff=" onFocus=\"this.style.$on\" onBlur=\"this.style.$off\""; $fsi="$fst"; } if($logs){unless(($logs eq "$log" || $logs=~ /^[\d]+\.txt$/ || $logs eq "all")){&er_("そのファイルは閲覧できません!");}} $nf="\n"; $SL="$klog_d\/1.txt"; # ---[簡易パスワード制限関連]---------------------------------------------------------------------------------------- if($s_ret){$P=$FORM{"P"}; $pf="\n"; $pp="&P=$P";}else{$pf=""; $pp="";} if($s_ret && $P eq ""){&er_("認証してください!");} if($P ne "R"){if($s_ret && $P ne "$s_pas"){&er_("パスワードが違います!");}} if($s_ret==2 && $P eq "R"){&er_("パスワードが違います!");} # ---[サブルーチンの読み込み/表示確定]------------------------------------------------------------------------------- if($mode eq "log"){&log_;} if($mode eq "del"){&del_;} if($mode eq "dl"){&dl_;} &srch_; exit; #-------------------------------------------------------------------------------------------------------------------- # [フォームコード] # -> フォーム入力内容を解釈する(d_code_) # sub d_code_ { 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; $value =~ s/\"/\"\;/g; $value =~ s/<>/\<\;\>\;/g; $value =~ s///g; $FORM{$name} = $value; if ($name eq 'del') { push(@d_,$value); } } $word= $FORM{'word'}; $andor=$FORM{'andor'}; $mode= $FORM{'mode'}; $logs =$FORM{'logs'}; $no =$FORM{'no'}; } #-------------------------------------------------------------------------------------------------------------------- # [ヘッダ表示] # -> HTMLヘッダを出力する(hed_) # sub hed_ { print "Content-type: text/html; charset=Shift_JIS\n\n"; print <<"_HTML_"; $STYLE $fsi $title [$_[0]] _HTML_ print"\n";}elsif($back eq ""){print">\n";} print <<"_HTML_";
_HTML_ if($t_img){print"\n";} else{print"$title\n";} $BG=" bgcolor=$t_back"; if($mode eq "log"){$T1="$BG";}else{$T2="$BG";} if($klog_s){$klog_link="過去ログ\n";} if($M_Rank){$rank_link="発言ランク\n";} if($topok){$New_link="新規作成\n";} if($TrON){$TrL="ツリー表\示\n";} if($TpON){$TpL="トピック表\示\n";} if($ThON){$ThL="スレッド表\示\n";} if($i_mode){$FiL="ファイル一覧\n";} $HEDF= <<"_HTML_";

$New_link $TrL$ThL$TpL$rank_link$FiL検索 $klog_link
HOME HELP新着記事

_HTML_ print"$HEDF
"; } #-------------------------------------------------------------------------------------------------------------------- # [フッタ表示] # -> HTMLフッタを出力する(foot_) # sub foot_ { print <<"_HTML_";
$HEDF - Child Tree -
_HTML_ exit; } #-------------------------------------------------------------------------------------------------------------------- # [検索機能&表示] # -> 検索フォームの表示と、検索結果の表示をおこなう(srch_) # sub srch_ { if($FORM{"PAGE"}){$klog_h=$FORM{"PAGE"};}else{$klog_h=$klog_h[0];} if($logs && $logs=~ /txt$/){ $logn=$logs; $C=""; $logn=~ s/\.//g; $logn=~ s/txt//; $logn=~ s/\///g; $nowlog="

過去ログ$logn を検索

"; }elsif($logs && $logs eq "$log"){$nowlog="

現在のログを検索

"; }elsif($logs && $logs eq "all"){$nowlog="

全過去ログを検索

";} if($FORM{"ALL"}){$nowlog="

No.$word の関連記事表\示

"; $KNS=" checked";} &hed_("Search:$word"); if($klog_s){$klog_msg="(*過去ログは表\示されません)
・過去ログから探す場合は検索範囲から過去ログを選択。";} if($andor eq "or"){$OC=" selected";}else{$OC="";} print <<"_STOP_";
ログ内検索
・キーワードを複数指定する場合は 半角スペース で区切ってください。
・検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
・[返信]をクリックすると返信ページへ移動します。 $klog_msg

$nf$pf
キーワード/ 検索条件 /
検索範囲/ 強調表\示/ ON (自動リンクOFF)
結果表\示件数/ 記事No検索/ ON
大文字と小文字を区別する
$nowlog
_SS_ if($word ne "") { $word =~ s/ / /g; $word =~ s/\t/ /g; @key_ws= split(/ /,$word); if($logs eq "all"){ $Stert=0; if($FORM{'N'}){($N,$S)=split(/\,/,$FORM{'N'}); $Stert=$N;} $End=$n-1; if($klog_a==0){&er_("全過去ログ検索は使用不可");}} else{$Stert=0; $End=0;} @new=(); $Next=0; foreach ($Stert..$End) { if($logs eq "all"){$I=$_+1; $IT="$I\.txt"; $Log="$klog_d\/$IT";} elsif($logs eq $log){$Log=$log;} else{$Log="$klog_d\/$logn\.txt";} open(DB,$Log) || &er_("Can't open $Log"); while ($Line=) { $hit = 0; if($FORM{"ALL"}){ ($nam,$date,$name,$email,$d_may,$comment, $url,$font,$ico,$type,$del,$ip) = split(/<>/,$Line); if($word==$nam || $word==$type){$hit=1;} }else{ foreach $key_w (@key_ws){ if($key_w =~ /[\x80-\xff]/){$jflag = 1;}else{$jflag = 0;} $key_w=~ s/^&$/&\;/g; $key_w=~ s/^<$/\<\;/g; $key_w=~ s/^>$/\>\;/g; $key_w=~ s/^\"$/\"\;/g; if ($jflag) { if(index($Line, $key_w) >= 0){$hit=1;}else{$hit=0;} } else { if($BM){if($Line =~ /$key_w/i){$hit=1;}else{$hit=0;}} else{if($Line =~ /$key_w/){$hit=1;}else{$hit=0;}} } if($hit){if($andor eq "or"){last;}}else{if($andor eq "and"){$hit=0; last;}} } } if($hit){push(@new,"$IT<>$Line");} if($#new+1 >= 200 && $logs eq "all"){$Next=$I+1;} } close(DB); if($Next){last;} } } $count=@new; if($logs eq "$log"){@new=reverse(@new);} if($count > 0){ $word=~ s/([^0-9A-Za-z_])/"%".unpack("H2",$1)/ge; $word=~ tr/ /+/; $total=@new; $page_=int(($total-1)/$klog_h); if($FORM{'page'} eq ""){$page=0;}else{$page=$FORM{'page'};} $end_data=@new-1; $page_end=$page+($klog_h-1); if($page_end >= $end_data){$page_end=$end_data;} $Pg=$page+1; $Pg2=$page_end+1; print"
\n"; $nl=$page_end + 1; $bl=$page - $klog_h; if($bl >= 0){ $Bl =""; $Ble=""; } if($page_end ne $end_data){ $Nl =""; $Nle=""; } $Plink="$Bl\<\;\<\;$Ble\n"; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$klog_h; if($i != 0){$Plink.="| ";} if($i eq $af){$Plink.="$i\n";} else{ $Plink.="$i\n"; } $a+=$klog_h; } $Plink.="$Nl\>\;\>\;$Nle\n"; print <<"_KT_"; $Plink
$nf$pf _KT_ foreach ($page .. $page_end) { ($IT,$nam,$date,$name,$email,$d_may,$comment,$url, $sp,$e,$type,$del,$ip,$tim,$Se) = split(/<>/,$new[$_]); ($Ip,$ico,$Ent,$fimg,$TXT,$SEL,$R)=split(/:/,$ip); ($ICON,$ICO,$font,$hr)=split(/\|/,$TXT); ($txt,$sel,$yobi)=split(/\|\|/,$SEL); if($date eq ""){next;} $Pr=""; if($ico){ if($Ent==0 && $fimg){$fimg=$no_ent;} if(-s "$i_dir/$ico"){$Size= -s "$i_dir/$ico";}else{$Size=0;} $KB=int($Size/1024); if($KB==0){$KB=1;} if($Size){ if($Size && $fimg ne $no_ent){$Alt=" alt=\"$ico/$KB\KB\"";}else{$Alt="";} if($fimg eq $no_ent){$A=0;} elsif($fimg eq "img"){ $Pr.=""; $A=1; }else{$Pr.="";$A=1;} if($img_h eq "" && $fimg ne img){$Pr.="";} elsif($img_h ne "" && $fimg ne img){$Pr.="";} $AEND=""; if($A){$AEND="$ico/";} $Pr="
$Pr"."
$AEND$KB\KB
\n"; } } if($font eq ""){$font=$text;} if($hr eq ""){$hr=$ttb;} if($type > 0){$t_com="記事No.$type のレス\n"; $KK="$type";}else{$t_com="親記事\n"; $KK="$nam";} if($d_may eq ""){$d_may="No Title";} if($email && $Se < 2){$name ="$name $AMark";} if($url){ if($URLIM){ if($UI_Wi){$UIWH=" width=$UI_Wi height=$UI_He>";} $i_or_t=""; }else{$i_or_t="http://$url";} $url="$i_or_t"; } if($Icon && $comment=~/
\(携帯\)$/){$ICO="$Ico_k";} if($ICO ne ""){ if($IconHei){$WH=" height=$IconHei width=$IconWid";} $ICO=""; } if($txt){$Txt="$TXT_T:[$txt] ";}else{$Txt="";} if($sel){$Sel="$SEL_T:[$sel] ";}else{$Sel="";} if($yobi){$yobi="[ID:$yobi]";} if($Txt || $Sel ||($Txt && $Sel)){ if($TS_Pr==0){$d_may="$Txt$Sel/"."$d_may";} elsif($TS_Pr==1){$comment="$Txt
$Sel

"."$comment";} elsif($TS_Pr==2){$comment.="

$Txt
$Sel";} } if($comment=~ /^
/){$comment=~ s/
/\n/g;} $comment="$comment"; if($IT ne "" && $logs eq "all"){ $IT=~s/^\n//; $IT=~s/\.txt$//; $PLL="過去ログ$ITより /"; $IT="&KLOG=$IT"; }else{$IT="";} if($FORM{"KYO"}){ if($comment=~/<\/pre>/){$comment=~ s/(>|\n)((>|>|>)[^\n]*)/$1$2<\/font>/g;} else{$comment=~ s/>((>|>|>)[^<]*)/>$1<\/font>/g;} &jcode'convert(*comment,'euc'); foreach $KEY (@key_ws){ &jcode'convert(*KEY,'euc'); $comment=~ s/$KEY/$KEY<\/b>/g; if($BM){$comment=~ s/($KEY)/$1<\/b>/ig;} else{$comment=~ s/$KEY/$KEY<\/b>/g;} } &jcode'convert(*comment,'sjis'); }else{&auto_($comment);} if($e){$e=" END /";} if($logs eq $log){ if($TOPH==0){$MD="mode=res&namber="; if($type){$MD.="$type";}else{$MD.="$nam";}} elsif($TOPH==1){$MD="mode=one&namber=$nam&type=$type&space=$sp";} elsif($TOPH==2){$MD="mode=al2&namber="; if($type){$MD.="$type";}else{$MD.="$nam";}} $L=" 返信ページ /"; } print <<"_HITCOM_";
■$nam  $d_may
□投稿者/ $name -($date) $yobi
$url
    $ICO$comment
$Pr
$t_com /$e$L$PLL 関連記事表\示
削除チェック/

_HITCOM_ } print "\n"; if($Bl){print"$Bl<前の$klog_h件$Ble\n";} if($Nl){if($Bl){print"| ";} print"$Nl次の$klog_h件>$Nle\n";} print <<"_KF_";

$Plink
$NLog

パスワード/
_KF_ }elsif($count == 0 && $word){print"
該当する記事はありませんでした。
";} &foot_; } #-------------------------------------------------------------------------------------------------------------------- # [過去ログリンク表示] # -> 過去ログを表示するリンク表示(log_) # sub log_ { &hed_("Past Log"); if($logs){ $logn=$logs; $logn=~ s/\.//; $logn=~ s/txt//; $logn=~ s/\///; $nowlog="

過去ログ$logn を表\示

"; } if($FORM{"KLOG_H"}){$klog_h[0]=$FORM{"KLOG_H"};} print <<"_LTOP_";
過去ログ表\示
  • 過去ログの検索は 検索 より行えます。
  • 過去ログの表\示はトピック表\示となります。
表\示ログ _LTOP_ if(-e $SL){ open(NO,"$klog_c"); $n = ; close(NO); $br=0; for ($i=1;$i<=$n;$i++) { print"過去ログ$i\n"; $br++; if($br==5){print"
";$br=0;} } }else{print"現在表\示できる過去ログはありません。\n";} print"

"; &foot_; } #-------------------------------------------------------------------------------------------------------------------- # [過去ログ削除] # -> 過去ログ内のいらない記事を削除(del_) # sub del_ { if($FORM{'pas'} ne "$pass"){ &er_("パスワードが違います!"); } if($logs eq $log){&er_("現在ログは$cgi_f管理モードより削除下さい。");} $logs="$klog_d/$logs"; open(DB,"$logs") || &er_("Can't open $logs"); @mens = ; close(DB); @CAS = (); foreach $mens (@mens) { $castam=0; $mens =~ s/\n//g; ($nam,$date,$name,$email,$d_may,$comment,$url, $sp,$e,$type,$del,$ip) = split(/<>/,$mens); foreach $word (@d_) {if($word eq "$nam"){$mens=""; $castam=1;}} if($mens eq ""){ $n=""; }else{ $n="\n"; } push (@CAS,"$mens$n"); } open (DB,">$logs"); print DB @CAS; close(DB); &log_; } #-------------------------------------------------------------------------------------------------------------------- # [URLをリンク等] # -> コメント内、リンク・文字色など処理(auto_) # sub auto_ { if($_[0]=~/<\/pre>/){$_[0]=~ s/(>|\n)((>|>|>)[^\n]*)/$1$2<\/font>/g;} else{$_[0]=~ s/>((>|>|>)[^<]*)/>$1<\/font>/g;} $_[0]=~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1$2<\/a>/g; $_[0]=~ s/([^\w^\.^\~^\-^\/^\?^\&^\+^\=^\:^\%^\;^\#^\,^\|]+)(No|NO|no|No.|NO.|no.|>>|>>|>>)([0-9\,\-]+)/$1$2$3<\/a>/g; } #-------------------------------------------------------------------------------------------------------------------- # [エラー表示] # -> エラーの内容を表示する(er_) # sub er_ { &hed_("Error"); print "
ERROR - $_[0]

\n"; &foot_; }