#!/usr/bin/perl
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#
# Yomi-Search Ver 4.22 (Since:2008/04/28)
# (C) 1999~ by yomi
# mail: yomi@pekori.to
# homepage: http://yomi.pekori.to/
#
# CSS Yomi-Search Ver 2.10 (Since:2010/02/16)
# (C) 2008~ by Rinne
# mail: info@w-art.org
# homepage: http://www.w-art.org/
#
# 【利用規約】――――――――――――――――――――――――――――
#
# 1. このスクリプトはフリーソフトです。
# このスクリプトを使用したいかなる損害に対して作者は一切の責任を負いません。
# 2. このスクリプトを使用した時点で利用規約に同意したものとみなさせていただきます。
# ご使用になる前に必ずお読みください。
# 利用規約: http://www.w-art.org/download/use.html
#
# 【メニュー】――――――――――――――――――――――――――――
#
# (01)各モードへ分岐
# (01-1)ページ設定
# (02)メッセージ画面出力(&mes)
# (03)フォームデータのデコード(&form_decode)
# (04)ランダムジャンプ(&random)
# (05)リンクジャンプ処理(&link)
#
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
require 'pl/jcode.pl';
require 'pl/cfg.cgi';
require 'pl/temp.cgi';
&form_decode();
if($EST{task}==1) {
&go_TASK;
}
# 【(01)各モードへ分岐】―――――――――――――――――――――――
if($FORM{mode}) {
if(!$EST{home}) {
$EST{home}=$EST{script};
}
# 各カテゴリの時の表示タイトル
if($FORM{mode} eq "kt") {
$Stitle=$ganes{$FORM{'kt'}};
($Spre_kt_file)=split(/_/,$FORM{'kt'});
}
# 新着サイトの表示タイトル,ファイル名
elsif($FORM{mode} eq "new") {
$Spre_kt_file="new_ys";
}
# 更新サイトの表示タイトル,ファイル名
elsif($FORM{mode} eq "renew") {
$Spre_kt_file="renew_ys";
}
# m1サイトの表示タイトル,ファイル名
elsif($FORM{mode} eq "m1") {
$Spre_kt_file="m1_ys";
}
# m2サイトの表示タイトル,ファイル名
elsif($FORM{mode} eq "m2") {
$Spre_kt_file="m2_ys";
}
# マイリンク
elsif($FORM{mode} eq "mylink") {
$Stitle="マイリンク";
} elsif($FORM{mode} eq "mladd" || $FORM{mode} eq "mldel") {
&mylink_ad;
}
# サイト情報
elsif($FORM{mode} eq "id") {
$Stitle="サイト情報";
}
# ランダムジャンプ
elsif($FORM{mode} eq "random") {
&random;
}
# リンクジャンプ
elsif($FORM{mode} eq "link") {
&link;
} else {
&mes("
\n\t\t\t- 指定したモードは存在しません(mode=$FORM{mode})。
\n\t\t
\n","モード選択エラー","java");
}
# 【(01-1)ページ設定】------------------------------------------------
$FORM{'page'}=~s/\D//g;
if($FORM{'page'}<1 || $FORM{'page'}>1000) {
$FORM{'page'}=1;
}
print "Content-type: text/html\n\n";
# カテゴリ別テンプレート。
if($FORM{mode} eq "kt") {
$kt_filename = "$EST{temp_path}kt$FORM{'kt'}.html";
if (!(-e $kt_filename)) {
local(@Gno);
@Gno=split(/_/,$FORM{'kt'});
# トップカテゴリのテンプレート。
$kt_filename = "$EST{temp_path}kt$Gno[0].html";
}
}
# 特殊カテゴリのテンプレート。
else {
$kt_filename = "$EST{temp_path}$FORM{mode}.html";
}
# 指定されたカテゴリ専用テンプレートがあるか?
if (-e $kt_filename) {
# ある場合専用テンプレート。
require "$kt_filename";
}
# 無い場合標準テンプレート。
else {
require "$EST{temp_path}kt.html";
}
&print_kt($FORM{kt},$FORM{mode},$FORM{page},$FORM{sort});
} elsif($EST{home} && $EST{top}) {
&location($EST{home});
} else{
&print_index;
}
exit;
# 【(02)メッセージ画面出力(&mes)】――――――――――――――――――
# 書式: &mes($arg1,$arg2,$arg3);
# 機能: メッセージ画面を出力する
# 引数: $arg1=> 表示するメッセージ
# $arg2=> ページのタイトル(省略時は「メッセージ画面」)
# $arg3=> ・JavaScriptによる「戻る」ボタン表示=java
# ・$ENV{'HTTP_REFERER'}を使う場合=env
# ・管理室へのボタン=kanri
# ・通常のURL又はパスを指定する場合にはそのURL又はパスを記入
# ・省略時は非表示
# $arg4=> ロック解除=unlock
# 戻り値: なし
sub mes {
local($MES,$Munlock,$BACK_URL,);
print "Content-type: text/html\n\n";
$Munlock=$_[3];
if($Munlock eq "unlock") {
&unlock();
}
$MES=$_[0];
if($_[1]) {
$TITLE=$_[1];
} else {
$TITLE="メッセージ画面";
}
if($_[2] eq "java") {
$BACK_URL="戻る
"
} elsif($_[2] eq "env") {
$BACK_URL="戻る
";
} elsif(!$_[2]) {
$BACK_URL="";
} else {
$BACK_URL="戻る
";
}
require "$EST{temp_path}mes.html";
exit;
}
# 【(03)フォームデータのデコード(&form_decode)】―――――――――――
# 書式: &form_decode($arg1,$arg2);
# 機能: フォームデータをデコードする
# 引数: $arg1=>「>」と「<」を(無効にする(省略時)=0/有効にする=1)
# $arg2=>「\n」と「\r」を(無効にする(省略時)=0/有効にする=1)
# 戻り値: なし
sub form_decode {
$arg1=$_[0];
$arg2=$_[1];
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $form, $ENV{'CONTENT_LENGTH'});
} else {
$form = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$form);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
$name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
if(!$arg1) {
$value =~ s/>/>/g;
$value =~ s/</g;
}
if(!$arg2) {
if(!$EST{syoukai_br}) {
$value =~ s/\n//g;
} else {
$value =~ s/\n/
/g;
}
$value =~ s/\r//g;
}
&jcode::convert(\$value,'sjis');
&jcode::convert(\$name,'sjis');
$FORM{$name} = $value;
}
}
# 【(04) ランダムジャンプ(&random)】―――――――――――――――――
sub random {
local($total_url,$id,$i=1,$jump_url,@Slog);
open(IN,"$EST{log_path}total_url.log");
$total_url=;
close(IN);
srand(time ^ ($$ + ($$ << 15)));
$id = int(rand($total_url))+1;
open(IN,"$EST{log_path}$EST{logfile}");
while() {
if($i eq $id) {
@Slog=split(/<>/,$_);
$jump_url=$Slog[2];
last;
}
$i++;
}
close(IN);
&location($jump_url);
exit;
}
# 【(05) リンクジャンプ処理(&link)】―――――――――――――――――
sub link {
$FORM{id}=~s/\D//g;
if($FORM{id}) {
local($fl=0,@ref_list);
# refererチェック
# refererが無いときにカウントしない場合にはこの行を削除
if(!$ENV{'HTTP_REFERER'}){$fl=1;}
@ref_list=split(/,/,$EST{rank_ref});
if(!$EST{rank_ref}) {
$fl=1;
} else {
foreach(@ref_list) {
if(index($ENV{'HTTP_REFERER'},$_)>=0){$fl=1;}
}
}
if($fl){
$FORM{id}=~s/\n//g;
&lock_rank();
open(OUT,">>$EST{log_path}rank_temp_ys.cgi");
print OUT "$FORM{id}<>" . time() . "<>$ENV{'REMOTE_ADDR'}\n";
close(OUT);
&unlock_rank();
}
}
if($FORM{url}) {
&location($FORM{url});
}
# ログファイルからURLを検索する(Ver3と互換)
else{
open(IN,"$EST{log_path}$EST{logfile}");
my $link_fl=0;
my($link);
while() {
@Slog=split(/<>/,$_,4);
if($Slog[0] eq $FORM{id}) {
$link=$Slog[2];
$link_fl=1;
last;
}
}
close(IN);
if(!$link_fl) {
&mes("\n\t\t\t- 該当するデータが見つかりません。
\n\t\t
\n","エラー","java");
} else {
&location($link);
}
}
}