#!/usr/bin/perl # ↑あなたが加入しているプロバイダの「perl」言語が使用できる # パスを指定します。一般的に「#!/usr/local/bin/perl」で大丈夫 #======================================================================================= # BannerEx Version 98.3 #======================================================================================= #日本語コード変換モジュール require './jcode.pl'; #--------------------------------------- #掲示板のタイトル $title = 'みんなのホームページ'; #--------------------------------------- #あなたのホームページのアドレス(フルパスで) $homepage = 'http://www.ouzan.net/'; #--------------------------------------- #メンバーを格納するデータベースファイル $datafile = 'linkvew.dat'; #--------------------------------------- #バックグランドの画像ファイル $bg_gif = 'rock_back.gif'; #--------------------------------------- #バックグランドカラー $bg_color = 'white'; #テキストの文字色 $text_color = 'dimgray'; #リンク文字色 $link_color = '#0000DD'; #Vリンク文字色 $vlink_color = '#DD0000'; #--------------------------------------- #1ページに表示する件数 $pagevew = 10; #--------------------------------------- #メール送信フラグ 'yes' / 'no' #登録内容を管理者のメールに送信 $sendmailflag = 'yes'; #sendmailのパスを指定 $sendmail = '/usr/lib/sendmail'; #管理者のメールアドレス $masteremail = 'info@ouzan.net'; #--------------------------------------- #管理者削除モードのパスワード $password = 'miko'; #--------------------------------------- #PRの複数行入力を許可する 'yes' / 'no' $multiline = 'yes'; #'no'に設定した場合の最大文字数 $maxlength = 80; #--------------------------------------- #クッキーを格納する名前を設定する $CookieName = 'bannerex'; #--------------------------------------- #サーバの種類 NT='nt' / UNIX= 'unix' $server = 'unix'; #--------------------------------------- #タイトル部のHTML $header =<<"END";


 


 

ここをクリックしてください。

個人でホームページをお持ちの方、ご自由に登録して下さい。
(こちらで相応しくないと判断した場合は削除させて頂きます)
END #======================================================================================= # 初期設定が必要なのはここまでです。 #======================================================================================= if ($sendmailflag eq 'yes') { require './sendemail.pl'; } $reload = "http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}"; @ITEM = ( 'TV・ラジオ','マネー・金融','写真・イラスト', '観光案内','地域情報','政治・経済','インターネット', '自然・動物','スポーツ','教育・文化', '旅行・グルメ','会社情報・求人案内','宇宙・科学', '検索・リンク','ゲーム','ギャンブル','その他' ); $agent = $ENV{'HTTP_USER_AGENT'}; $textwidth = 60; if ($agent =~ /MSIE\ 3/i) { $textwidth = $textwidth * 1.5; } if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'}); } else { $QUERY_DATA = $ENV{'QUERY_STRING'}; } @PAIRS = split(/&/,$QUERY_DATA); foreach $pair (@PAIRS) { ($dummy, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s//>/g; $value =~ s/\n//g; $value =~ s/\,/,/g; &jcode'convert(*value,'sjis'); $QUERY{$dummy} = $value; } &data_read; if ($QUERY{'genre'} eq '指定しない') { $QUERY{'genre'} = ''; } if ($QUERY{'HP'} =~ /^http\:\/\/(.*)/i) { $QUERY{'HP'} = $1; } if ($QUERY{'gif'} =~ /^http\:\/\/(.*)/i) { $QUERY{'gif'} = $1; } #押されたボタンや、呼び出しに対しての分岐 if ($QUERY{'action'} eq 'preview') { if ($QUERY{'name'} eq '') { &error(bad_name); } if ($QUERY{'pass'} eq '' && $QUERY{'mode'} eq 'edit') { &error(not_pass); } if ($QUERY{'subject'} eq '新規登録') { if (!($QUERY{'email'} =~ /.+\@.+\..+/)) { &error(bad_email); } if ($QUERY{'hpname'} eq '') { &error(bad_hpname); } if ($QUERY{'HP'} eq '') { &error(bad_addr); } if ($QUERY{'gif'} eq '') { &error(bad_gif); } if ($QUERY{'memo'} eq '') { &error(bad_memo); } } if ($multiline eq 'no') { $QUERY{'memo'} = substr($QUERY{'memo'},0,$maxlength); } &html_head; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($QUERY{'email'} ne '') { print "\n"; } print "\n"; print "\n"; if ($QUERY{'hpname'} ne '') { print "\n"; } if ($QUERY{'HP'} ne '') { print "\n"; } if ($QUERY{'gif'} ne '') { print "\n"; } if ($QUERY{'memo'} ne '') { print "\n"; } print "
\n"; print "

■$QUERY{'subject'}

\n"; print "・あなたのページへのリンクを確認して下さい。
\n"; print "・正常にバナーが表\示されていなければ管理者が削除します。
\n"; print "・変更訂正は、表\示されている項目のみ変更されます。
\n"; print "

ID:$QUERY{'name'}
E-Mail:$QUERY{'email'}
Password:$QUERY{'pass'}
ジャンル:$QUERY{'item'}
タイトル:$QUERY{'hpname'}
URL:http://$QUERY{'HP'}
画像URL:
http://$QUERY{'gif'}
内容:$QUERY{'memo'}
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; exit; } elsif ($QUERY{'action'} eq 'regist') { $i = 0; $match = 0; foreach $line (@DATA) { ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$line); if ($QUERY{'name'} eq $name && $QUERY{'pass'} eq $pass) { $match = 1; last; } $i++; } if ($match) { if ($QUERY{'subject'} eq '新規登録') { &error(bad_noregist); } if ($QUERY{'email'} =~ /.+\@.+\..+/) { $email = $QUERY{'email'}; } if ($QUERY{'hpname'} ne '') { $hpname = $QUERY{'hpname'}; } if ($QUERY{'HP'} ne '') { $HP = $QUERY{'HP'}; } if ($QUERY{'gif'} ne '') { $gif = $QUERY{'gif'}; } if ($QUERY{'memo'} ne '') { $memo = $QUERY{'memo'}; } $memo =~ s/\n//g; $value = "$code\,$access\,$name\,$pass\,$email\,$QUERY{'item'}\,$hpname\,$HP\,$gif\,$memo\n"; $DATA[$i] = $value; } else { if ($QUERY{'subject'} eq '訂正変更') { &error(bad_pass); } $count = @DATA; if ($count < 1) { $new_code = 1; } else { ($code,$dummy) = split(/\,/,$DATA[0]); $new_code = $code + 1; } $value = "$new_code\,0\,$QUERY{'name'}\,$QUERY{'pass'}\,$QUERY{'email'}\,$QUERY{'item'}\,$QUERY{'hpname'}\,$QUERY{'HP'}\,$QUERY{'gif'}\,$QUERY{'memo'}\n"; unshift(@DATA,$value); if ($sendmailflag eq 'yes') { $mailto = $masteremail; $email = $QUERY{'email'}; $subject = "新規登録"; $msg = substr("== $title ======================================================",0,60)."\n"; $msg .= "URL:$reload\n\n"; $msg .= "$QUERY{'name'}さん\n"; $msg .= "HP = $QUERY{'HP'}\n"; $msg .= "password = $QUERY{'pass'}\n"; $msg .= "$QUERY{'memo'}\n"; $msg .= "============================================================\n"; $msg =~ s/,/\,/g; $msg =~ s/\r/\n/g; &jcode'convert(*subject,'jis'); &jcode'convert(*msg,'jis'); if (&send_email($subject, $email, $mailto, '', '', $msg)) { &error(send_mail); } } } if (&data_save != 1) { &error(bad_save); } if ($server eq 'nt') { print "HTTP/1.0 302 Moved Temporarily\n" ; } print "Location: $reload?\n\n"; } elsif ($QUERY{'action'} eq 'insert') { &html_head; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; shift(@ITEM); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($multiline eq 'yes') { print ""; } else { print "\n"; } print "
\n"; print "

■登録/変更

\n"; print "・新規登録または、変更訂正を選択します。
\n"; print "・同じ[ID]と[Password]で重複登録は出来ません。
\n"; print "・変更訂正は、[ID]、[Password]を記入し、変更する項目だけ入力して下さい。
\n"; print "・約88×32ピクセルの画像が必要です。(必ずフルパスで)
\n"; print "・バナー画像がない場合はhttp://www.ouzan.net/cgi-bin/bannerex/no.gifを使用してください。
\n"; print "・他の大きさの画像を指定しても自動で調整されます。
\n"; print "・紹介文にタグを使用することは出来ません。
\n"; if ($multiline ne 'yes') { print "・テキストボックスより長い文章は途中でも切り捨てます。
\n"; } print "

\n"; print " 新規登録\n"; print " 変更訂正
ID:
E-Mail:
Password:
ジャンル:
タイトル:
URL:
画像URL:
内容:
\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; exit; } elsif ($QUERY{'action'} eq 'delete') { if ($QUERY{'password'} eq '') { &error(not_pass); } if ($QUERY{'code'} < 1) { &error(bad_code); } $i = 0; $match = 0; foreach $line (@DATA) { ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$line); if ($QUERY{'code'} == $code) { if ($QUERY{'password'} eq $pass || $QUERY{'password'} eq $password) { splice(@DATA,$i,1); $match = 1; last; } } $i++; } if ($match) { if (&data_save != 1) { &error(bad_save); } } else { &error(bad_code); } if ($server eq 'nt') { print "HTTP/1.0 302 Moved Temporarily\n" ; } print "Location: $reload?\n\n"; } elsif ($QUERY{'action'} eq 'jump') { $i = 0; $match = 0; foreach $line (@DATA) { ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$line); if ($QUERY{'code'} == $code) { $match = 1; last; } $i++; } if ($match) { local($name,$value); $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{$CookieName}); foreach $pair (@pairs) { ($name, $value) = split(/\!/, $pair); $COOKIE{$name} = $value; } if ($COOKIE{'date'} eq $DATE && $COOKIE{'code'} == $code) { $access--; } else { $access++; } $value = "$code\,$access\,$name\,$pass\,$email\,$item\,$hpname\,$HP\,$gif\,$memo"; $DATA[$i] = $value; if (&data_save != 1) { &error(bad_save); } $HP = "http://$HP"; $cookievalue = "date\!$DATE\,code\!$code"; print "Set-Cookie: $CookieName=$cookievalue; \n"; if ($server eq 'nt') { print "HTTP/1.0 302 Moved Temporarily\n" ; } print "Location: $HP\n\n"; } else { &error(bad_addr); } } elsif ($QUERY{'action'} eq 'random') { srand(time|$$); $i = rand(@DATA); ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$DATA[$i]); $access++; $value = "$code\,$access\,$name\,$pass\,$email\,$item\,$hpname\,$HP\,$gif\,$memo"; $DATA[$i] = $value; if (&data_save != 1) { &error(bad_save); } $HP = "http://$HP"; if ($server eq 'nt') { print "HTTP/1.0 302 Moved Temporarily\n" ; } print "Location: $HP\n\n"; } $QUERY{'keyword'} =~ s/ //g; $QUERY{'keyword'} =~ s/ //g; if ($QUERY{'genre'} eq '' && $QUERY{'keyword'} eq '') { @MATCH = @DATA; } else { foreach $line (@DATA) { $match = 1; ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$line); if ($QUERY{'genre'} ne '') { if ($QUERY{'genre'} ne $item) { $match = 0; } } if ($match && $QUERY{'keyword'} ne '') { if (index($line,$QUERY{'keyword'}) < 0) { $match = 0; } } if ($match) { push(@MATCH,$line); } } } if (@MATCH < 1) { &error(bad_search); } if ($QUERY{'button'} eq 'ランキング') { foreach $line (@MATCH) { ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$line); $count = sprintf("%06d",$access); $line = "$count\,$line"; } @MATCH = sort(@MATCH); @MATCH = reverse(@MATCH); } $max = @DATA; $matchdata = @MATCH; &html_head; print "
\n"; if ($QUERY{'pline'} eq '') { $pline = 0; } else { $pline = $QUERY{'pline'}; } $end_data = @MATCH - 1; $page_end = $pline + ($pagevew - 1); if ($page_end >= $end_data) { $page_end = $end_data; } $start = $pline + 1; $end = $page_end + 1; print "現在 [$max] 件中 [$matchdata] 件を抽出 "; print "[$start] から [$end] まで"; print "表\示しています。\n"; print "
\n"; print "\n"; if ($QUERY{'genre'}) { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; foreach ($pline .. $page_end) { if ($QUERY{'button'} eq 'ランキング') { ($dummy,$code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$MATCH[$_]); } else { ($code,$access,$name,$pass,$email,$item,$hpname,$HP,$gif,$memo) = split(/\,/,$MATCH[$_]); } $memo =~ s/\r/
/g; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "
$QUERY{'genre'}
BannerProfileAccessDel
[$hpname]"; if ($QUERY{'genre'} eq '') { print " $item"; } print "
\n"; print "$memo
$access

\n"; print "\n"; print "\n"; print "
Delete Password:\n"; print "
\n"; print "

\n"; $next_line = $page_end + 1; if ($page_end ne $end_data) { print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; } print "
\n"; print "

BannerEx by Terra

\n"; print "\n"; exit; #======================================================================================= sub html_head { print "Content-type: text/html\n\n"; print "$title\n"; print "\n"; print "
\n"; print $header; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
genre:\n"; unshift(@ITEM,"指定しない"); if ($QUERY{'genre'} eq '') { $selected = $ITEM[0]; } else { $selected = $QUERY{'genre'}; } print "\n"; print " keyword:\n"; print "\n"; print "
\n"; print "
\n"; print "
\n"; } #======================================================================================= sub date_change { @DATE = localtime($_[0]); $DATE[5] += 1900; $DATE[4]++; $wday = ('日','月','火','水','木','金','土') [$DATE[6]]; $_ = "$DATE[5]年$DATE[4]月$DATE[3]日($wday) $DATE[2]時$DATE[1]分"; } #======================================================================================= sub data_read { if (open(DB,"$datafile")) { @DATA = ; close(DB); } } #======================================================================================= sub data_save { $tmpfile = 'bannerex.tmp'; foreach (1 .. 10) { unless (-f $tmpfile) { $tmpflag = 1; last; } $tmpflag = 0; sleep(1); } if ($tmpflag == 1) { $tmp_dummy = "$$\.tmp"; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } close(TMP); chmod 0666,$tmp_dummy; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } print TMP @DATA; close(TMP); foreach (1 .. 10) { unless (-f $tmpfile) { if (!open(TMP,">$tmpfile")) { &error(bad_tmpfile); } close(TMP); rename($tmp_dummy,$datafile); unlink $tmpfile; $tmpflag = 1; last; } $tmpflag = 0; sleep(1); } } $tmpflag; } #======================================================================================= sub error { $error = $_[0]; if ($error eq 'bad_file') { $msg = 'ファイルのオープン、入出力に失敗しました。'; } elsif ($error eq 'bad_tmpfile') { $msg = 'テンポラリーファイルが作成できませんでした。
ディレクトリのパーミッションを確認して下さい。'; } elsif ($error eq 'bad_save') { $msg = '混雑していて送信に失敗しました。
時間をおいて再度送信して下さい。'; } elsif ($error eq 'bad_name') { $msg = 'ニックネーム又は本名が記入されていません。'; } elsif ($error eq 'bad_memo') { $msg = '何か自己紹介、ホームページのPRを記入して下さい。'; } elsif ($error eq 'bad_hpname') { $msg = 'ホームページのタイトルを記入して下さい。'; } elsif ($error eq 'bad_email') { $msg = 'メールアドレスが不正です。'; } elsif ($error eq 'bad_pass') { $msg = 'IDまたは、パスワードが一致しません。'; } elsif ($error eq 'not_pass') { $msg = 'パスワードが記入されていません。'; } elsif ($error eq 'bad_code') { $msg = '削除するコードが指定されていないか、見つかりません。'; } elsif ($error eq 'bad_data') { $msg = '最低限度必要なデータが記入されていません。'; } elsif ($error eq 'bad_gif') { $msg = '画像ファイルアドレスが不正です。'; } elsif ($error eq 'bad_noregist') { $msg = 'すでに登録されています。'; } elsif ($error eq 'bad_addr') { $msg = 'ホームページのアドレスが不正です。'; } elsif ($error eq 'bad_search') { $msg = '指定の条件で見つかりませんでした。'; } elsif ($error eq 'send_mail') { $msg = 'メールが送信できませんでした。'; } else { $msg = '原因不明のエラーで処理を継続できません。'; } &html_head; print "
\n"; print "

 

 

\n"; print "\n"; print "\n"; print "

ERROR

\n"; print "$msg

 

 

\n"; print "
\n"; exit; }