#!/usr/local/bin/perl # ↑サーバーの「perl」のパスを指定。 # 駄目なら「#!/usr/local/bin/perl」 # それでも駄目ならサーバー管理者に問い合わせて下さい。 ########################################################## ##--------------------- Chama-Search --------------------- ## (C)Copyright 2001 by Chama.ne.jp ## E-mail:master@chama.ne.jp ## HP:http://www.chama.ne.jp ########################################################## #免責事項、バージョンアップ情報はkanri.cgiを参照 #---------- ↓初期設定項目 -------------------------------# #このCGIの名前 $cgi = 'search.cgi'; #転送CGI名 $prev_cgi = 'prev.cgi'; #詳細検索用CGI名 $search_cgi = 'search.cgi'; #検索結果表示用CGI名 $search2_cgi = 'search2.cgi'; #サイト登録CGI名 $touroku_cgi = 'touroku.cgi'; #オートホットCGI名 $hotstart_cgi = 'hotstart.cgi'; #基本情報ファイル名 $k_file = 'data/kihon.dat'; #表示情報ファイル名 $pk_file = 'data/prevset.dat'; #カテゴリファイルの指定 $kate_file = 'data/kate.dat'; #CGI名著作権表示ファイル名 $cgi_file = 'data/cgi.dat'; #データファイル名 $d_file = 'data/data.dat'; #フッター情報ファイル名 $footer_file = 'data/footer.dat'; #ヘッダー情報ファイル名 $header_file = 'data/header.dat'; #カウンタ情報ファイル名 $count_file = 'data/cnt.dat'; #スタイルシートファイル名 $style_file = 'search.css'; #カウンタ情報保存日数 $count_max = 60; #アクセスデータ保存ディレクトリ名の指定 $cnt_file = 'data/access.dat'; #クッキーの名前 $cookiename = 'chamasearch'; #クッキーの保存日数 $cookiedate = 60; #アクセスランキングファイル名 $lank_file = 'data/lank.dat'; #---------- ↓プログラム--------------------------------------------------# #----------↑設定終了↓以下は修正しない。--------------------------------- require './jcode.pl'; &decode; #クッキーの読み込み &cookie_read($cookiename); $time = time; ($sec,$min,$hou,$mda,$mon,$yea,$wda,$yda,$isd) = localtime($time); $date_now = sprintf("%02d%02d%02d",$yea + 1900,$mon + 1,$mda); $date_now2 = sprintf("%02d年%02d月%02d日",$yea + 1900,$mon + 1,$mda); $tcpip = $ENV{'REMOTE_ADDR'}; #ファイルロック &o_lock; #基本ファイルを開く &k_open; #スタイルシートを読み込む &stylein; #表示情報データの取得 &pk_open; #CGIファイルを開く &cgi_open; #カテゴリファイルを開く &kate_open; #データファイルを開く &data_open; #ヘッダー情報ファイルを開く &header_open; #フッター情報ファイルを開く &footer_open; #カウンタ情報の取得・更新 &countup; $check_time = $time - 24*60*60; #アクセスデータの保存 &access; #クッキーの更新 if($c_time < $check_time){ unless($cr_flag == 1){ #クッキーに書き込み $cookie_value="ip!$tcpip,time!$time"; &cookie_regist($cookiename,$cookie_value,$cookiedate); } } #ランキングデータ取得・更新 &lankup; #ロック解除 &c_lock; #トップページの表示 &t_prev; #サブルーチン--------------------------------------------------------------# #デコード処理------------------------------------------------------------- sub decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buff, $ENV{'CONTENT_LENGTH'}); } else { $buff = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buff); 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'); $in{$name} = $value; } $in{'id'} =~ s/\"//g; $in{'id'} =~ s/\//g; } #基本ファイルのOPEN------------------------------------------------------- sub k_open{ open KF,"$k_file" or die "$k_file オープン失敗"; while (){ $_ =~ s/[\r\n\t\f]//g; ($mail,$url,$logo,$title,$title_size,$title_color, $word_size,$word_color,$table_color,$td_color,$html, $bg_file,$pass,$pmax,$email_pok,$post_pok,$add_pok,$tel_pok, $fax_pok,$img_new,$img_cool,$img_hot,$img_home,$pmagaurl, $pmagain,$pmagaflag[1],$pmagaflag[2],$pmagaflag[3],$img_lank1, $img_lank2,$img_lank3,$sendmail,$subject1,$subject2,$subject3, $ktourokuset,$kpostset,$ktelset,$kfaxset,$kcommax,$pmagaflag[4], $pmagaflag[5],$pmagaflag[6],$pmagaflag[7],$pmagaflag[8],$pmagaflag[9], $khotok,$kkcntprev,$khfhtmlon,$khpnamemax,$kimg,$kanri_pok) = split(/<>/,$_); } close KF; } #スタイルシートの読み込み---------------------------------------------------- sub stylein{ open STYLEIN,"$style_file"; while(){ $_ =~ s/[\r\n\f]//g; $stylehtml .= $_; $stylehtml .= "\n"; } close STYLEIN; } #表示情報データのOPEN------------------------------------------------------- sub pk_open{ open PKF,"$pk_file" or die "$pk_file オープン失敗"; while (){ $_ =~ s/[\r\n\t\f]//g; ($count_prev,$lank_reset,$lank_pmax,$new_max,$z_pass, $prev_com,$prev_com2,$prev_com3,$prev_logo,$kmenuprev, $knewprev,$klankprev,$ksearchprev,$kcombr) = split(/<>/,$_); } close PKF; } #CGI情報ファイルのOPEN------------------------------------------------------- sub cgi_open{ open CGIIN,"$cgi_file" or die "$cgi_file オープン失敗"; while (){ $_ =~ s/[\r\n\t\f]//g; ($cgi_name,$copyright) = split(/<>/,$_); } close CGIIN; } #カテゴリファイルのOPEN---------------------------------------------------- sub kate_open{ open KAF,"$kate_file" or die "$kate_file オープン失敗"; while (){ $_ =~ s/[\r\n\t\f]//g; ($ca_no[$ca_cnt],$ca_name[$ca_cnt],$ca_html[$ca_cnt],$ca_prev[$ca_cnt]) = split(/<>/,$_); $ca_no[$ca_cnt] =~ s/\-0//g; if($ca_prev[$ca_cnt] == 1){ $ca_cnt++; } } close KAF; } #データファイルのOPEN------------------------------------------------------ sub header_open{ $f_cnt = 0; open HEADIN,"$header_file" or die "$header_file オープン失敗"; while (){ $_ =~ s/[\r\t\f\n]//g; @header_data = (@header_data,$_); } close HEADIN; } #データファイルのOPEN------------------------------------------------------ sub footer_open{ $f_cnt = 0; open FOOTERIN,"$footer_file" or die "$footer_file オープン失敗"; while (){ $_ =~ s/[\r\t\f\n]//g; @footer_data = (@footer_data,$_); } close FOOTERIN; } #登録データを開く-------------------------------------------------------- sub data_open{ $d_cnt = 0; open DATAIN,"$d_file" or die "Cannot open $d_dile:s!"; while (){ $_ =~ s/[\r\n\t\f]//g; ($d_no[$d_cnt],$d_pass[$d_cnt],$d_prevcnt[$d_cnt],$d_cool[$d_cnt],$d_sougo[$d_cnt],$d_prev[$d_cnt], $d_tname[$d_cnt],$d_name[$d_cnt],$d_kate1[$d_cnt],$d_kate2[$d_cnt],$d_kate3[$d_cnt], $d_logo[$d_cnt],$d_yuubin[$d_cnt],$d_add[$d_cnt],$d_add2[$d_cnt], $d_tel[$d_cnt],$d_fax[$d_cnt],$d_mail[$d_cnt],$d_url[$d_cnt], $d_com[$d_cnt],$d_ip[$d_cnt]) = split(/<>/,$_); $data_logo{$d_no[$d_cnt]} = $d_logo[$d_cnt]; $data_url{$d_no[$d_cnt]} = $d_url[$d_cnt]; $data_name{$d_no[$d_cnt]} = $d_name[$d_cnt]; $data_prevcnt{$d_no[$d_cnt]} = $d_prevcnt[$d_cnt]; $d_kate1 =~ s/\-0//g; $d_kate2 =~ s/\-0//g; $d_kate3 =~ s/\-0//g; $katecnt{$d_kate1[$d_cnt]}++; $katecnt{$d_kate2[$d_cnt]}++; $katecnt{$d_kate3[$d_cnt]}++; if($in{'id'} == $d_no[$d_cnt]){ $data_flag = 1; } if($d_prev[$d_cnt] ==1){ $d_cnt++; } } close DATAIN; } #アクセスデータの保存------------------------------------------------------ sub access{ $cr_flag = 0; #アクセスデータを取得 open CNTIN,"$cnt_file"; while(){ $_ =~ s/[\r\n\t\f]//g; ($cnt_ip[$ac_cnt],$cnt_id[$ac_cnt],$cnt_time[$ac_cnt]) = split(/<>/,$_); if($cnt_ip[$ac_cnt] eq $tcpip){ $cr_flag = 1; } $ac_cnt++; } close CNTIN; unless($cr_flag == 1){ open CNTOUT,">$cnt_file"; print CNTOUT $tcpip,"<>",$in{'id'},"<>",$time,"\n"; while($ac_cnt > $ac_rcnt){ if($cnt_time[$ac_rcnt] > $check_time){ print CNTOUT $cnt_ip[$ac_rcnt],"<>",$cnt_id[$ac_rcnt],"<>",$cnt_time[$ac_rcnt],"\n"; } $ac_rcnt++; } close CNTOUT; } } #カウンタ情報の取得・更新------------------------------------------------- sub countup{ open COUNTIN,"$count_file"; while(){ $_ =~ s/[\r\n\t\f]//g; ($count_date[$count_cnt],$count_today[$count_cnt],$count_total[$count_cnt]) = split(/<>/,$_); $count_cnt++; } close COUNTIN; open COUNTOUT,">$count_file"; $count_rcnt = 0; $p_cnttoday = 1; if($count_date[0] eq $date_now2){ print COUNTOUT $count_date[0],"<>",$count_today[0]+1,"<>",$count_total[0]+1,"\n"; $p_cnttoday += $count_today[0]; $count_rcnt++; }else{ print COUNTOUT $date_now2,"<>1<>",$count_total[0]+1,"\n"; } while($count_max > $count_rcnt){ print COUNTOUT $count_date[$count_rcnt],"<>",$count_today[$count_rcnt],"<>",$count_total[$count_rcnt],"\n"; $count_rcnt++; } close COUNTOUT; } #ランキングデータの取得・更新---------------------------------------------- sub lankup{ $lank_idcnt = 1; if($lank_reset == $wda){ $read_flag += 1; } if($p_cnttoday == 1){ $read_flag += 1; } unless($read_flag == 2){ open LANKIN,"$lank_file"; while(){ $_ =~ s/[\r\n\t\f]//g; ($lank_id[$lank_cnt],$lank_count[$lank_cnt]) =split(/<>/,$_); if($in{'id'} eq $lank_id[$lank_cnt]){ $lank_idcnt += $lank_count[$lank_cnt]; } $lankcount{$lank_id[$lank_cnt]} = $lank_count[$lank_cnt]; $lank_cnt++; } close LANKIN; }else{ open LANKZERO,">$lank_file"; print LANKZERO "\n"; close LANKZERO; } unless($cr_flag == 1){ if($data_flag == 1 && $c_time < $check_time){ open LANKOUT,">$lank_file"; $lank_rflag = 1; while($lank_cnt > $lank_rcnt){ if($lank_count[$lank_rcnt] <= $lank_idcnt && $lank_rflag == 1 && $in{'id'}){ print LANKOUT $in{'id'},"<>",$lank_idcnt,"\n"; $lank_rflag = 2; } unless($lank_id[$lank_rcnt] == $in{'id'}){ if($lank_id[$lank_rcnt]){ print LANKOUT $lank_id[$lank_rcnt],"<>",$lank_count[$lank_rcnt],"\n"; } } $lank_rcnt++; } if($lank_rflag == 1 && $in{'id'}){ print LANKOUT $in{'id'},"<>",$lank_idcnt,"\n"; } close LANKOUT; } } } #トップページの表示------------------------------------------------------- sub t_prev{ ⊤ unless($kmenuprev == 2){ print "
\n"; print "
\n"; print "
\n"; print "\n"; print "["; print ""; print "ホーム"; print "\n"; print "]\n"; print "["; print ""; print "新着サイト"; print "\n"; print "]\n"; print "["; print ""; print "相互リンクサイト"; print "\n"; print "]\n"; print "["; print ""; print "クールサイト"; print "\n"; print "]\n"; if($khotok < 2){ print "["; print ""; print "オートホット"; print "\n"; print "]\n"; } print "["; print ""; print "サイト登録"; print "\n"; print "]\n"; print "["; print ""; print "E-mail"; print "\n"; print "]\n"; if($count_prev > 0){ if($count_prev > 1){ print "TODAY:"; print $p_cnttoday,"\n"; } print "TOTAL:"; print $count_total[0]+1; } print "\n"; print "
\n"; print "
\n"; } print "
\n"; print "\n"; print "\n"; unless($knewprev == 2){ print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; $d_pcnt = 0; while($new_max > $d_pcnt){ if($d_prev[$d_pcnt] == 1){ print "\n"; print "\n"; print "\n"; } $d_pcnt++; } print "
\n"; print "\n"; print "新着サイト"; print "\n"; print "
\n"; print ""; if($d_logo[$d_pcnt]){ print ""; }else{ print ""; print $d_name[$d_pcnt]; print ""; } print "\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; unless($ksearchprev == 2){ print "
"; print "\n"; print "and\n"; print "or\n"; print "\n"; print "
\n"; } print "
\n"; print "\n"; print "\n"; $td_flag = 0; $td_cnt = 0; while($ca_cnt > $ca_pcnt){ ($cano,$damy,$damy2) = split(/\-/,$ca_no[$ca_pcnt]); unless($damy){ if($td_flag == 1){ print "\n"; } if($td_cnt == 2){ print "\n"; print "\n"; $td_cnt = 0; } print "\n" if($td_flag == 1); unless($td_cnt == 2){ print "\n"; } print "\n"; print "
\n"; $td_flag = 1; $td_cnt++; print ""; print ""; print $ca_name[$ca_pcnt]; print ""; print "\n"; print "
\n"; $b_cnt++; }elsif(!$damy2){ print " "; print ""; print ""; print $ca_name[$ca_pcnt]; print ""; print "\n"; } $ca_pcnt++; } print "
 
\n"; print "
\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; if($kcombr == 1){ $prev_com3 =~ s/
/\n/g; } print $prev_com3; print "
\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; if($kcombr == 1){ $prev_com =~ s/
/\n/g; } print $prev_com; print "
\n"; print "
\n"; unless($klankprev == 2){ if($lank_pmax > 0){ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } $lank_pcnt = 0; $lank_ppcnt = 1; while($lank_pmax > $lank_pcnt){ if($lank_id[$lank_pcnt]){ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $lank_ppcnt++; } $lank_pcnt++; } if($lank_pmax > 0){ print "
\n"; print "\n"; if($prev_logo){ print "\n"; }else{ print "アクセスランキング"; } print "\n"; print "
\n"; print "\n"; print "順位\n"; print "\n"; print "\n"; print "\n"; print "サイト名\n"; print "\n"; print "\n"; print "\n"; print "IN\n"; print "\n"; print "\n"; print "\n"; print "OUT\n"; print "\n"; print "
\n"; if($lank_ppcnt == 1 && $img_lank1){ print "\n"; }elsif($lank_ppcnt == 2 && $img_lank2){ print "\n"; }elsif($lank_ppcnt == 3 && $img_lank3){ print "\n"; }else{ print "\n"; print $lank_ppcnt; print "\n"; } print "\n"; print "\n"; print "\n"; if($data_logo{$lank_id[$lank_pcnt]}){ print ""; }else{ print $data_name{$lank_id[$lank_pcnt]}; } print "\n"; print "\n"; print "\n"; print "\n"; print $lank_count[$lank_pcnt]; print "\n"; print "\n"; print "\n"; print $data_prevcnt{$lank_id[$lank_pcnt]}; print "\n"; print "
\n"; } } print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; if($kcombr == 1){ $prev_com2 =~ s/
/\n/g; } print $prev_com2; print "
\n"; print "
\n"; print "
\n"; print "
\n"; print "\n"; if($khfhtmlon == 2){ foreach $footer(@footer_data){ print $footer,"\n"; } }else{ foreach $footer(@footer_data){ print $footer; print "
\n"; } } print "
\n"; &last; } #HTMLprintサブルーチン--------------------------------------------------- sub top{ print "Content-type:text/html\n\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; if($bg_file){ print "\n"; }else{ print "\n"; } print "\n"; if($khfhtmlon == 2){ foreach $header(@header_data){ print $header,"\n";; } }else{ foreach $header(@header_data){ print $header; print "
\n"; } } if($logo){ print "\n"; }else{ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "$title\n"; print "\n"; print "
\n"; } } sub last{ print "
\n"; print "
\n"; print "\n"; print $cgi_name; print "©\;"; print $copyright; if($kanri_pok < 1){ print "
\n"; print "\n"; print "\n"; } print "
\n"; print "\n"; print "
\n"; print "\n"; exit; } #クッキーの読み込み---------------------------------------------- sub cookie_read { local($cookiename) = $_[0];; local($key,$value); local(@pairs) = split(/;/,$ENV{'HTTP_COOKIE'}); foreach (@pairs) { ($key, $value) = split(/=/, $_); $DUMMY{$key} = $value; } @pairs = split(/,/,$DUMMY{$cookiename}); foreach $pair (@pairs) { ($key, $value) = split(/\!/, $pair); $COOKIE{$key} = $value; } $c_ip=$COOKIE{'ip'}; $c_time=$COOKIE{'time'}; } #クッキーの書き込み---------------------------------------------- sub cookie_regist { local($cookiename, $cookievalue, $cookiedate) = @_; local(@date) = localtime(time + $cookiedate * 86400); $date[5] += 1900; $date[3] = sprintf("%02d",$date[3]); $date[2] = sprintf("%02d",$date[2]); $date[1] = sprintf("%02d",$date[1]); $date[0] = sprintf("%02d",$date[0]); local($wday) = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$date[6]]; local($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$date[4]]; local($date_gmt) = "$wday, $date[3]\-$month\-$date[5] $date[2]:$date[1]:$date[0] GMT"; #クッキーに書き込み print "Set-Cookie: $cookiename=$cookievalue; expires=$date_gmt\n"; } #データロック------------------------------------------------ sub o_lock{ open(LOCK,">data.lock"); flock(LOCK,2); } #ロック解除-------------------------------------------------- sub c_lock{ close(LOCK); }