#!/usr/local/bin/perl # # TWISTERSMAP SCRIPT # Script written by SayQoo # mail@yumekana.com # # <利用規定> # 当スクリプトの著作権は、せいくうにあります。 # 当スクリプトの著作権表示を変更、または削除することはできません。 # ########################### TWISTERSMAP SCRIPT ########################### require './jcode.pl'; require './cgi-lib.pl'; #********** 設定項目 ********** #★ タイトル名 $title = "ツイスターズマップ"; #★ 大会年度 $holdyy = "2012"; #★ トップページURL $topurl = "https://www.twisters.jp/twisters2012/"; #★ トップページタイトル $toptitle = "ツイスターズ2012in福岡"; #★ トップページへ画像(相対パス) $totoppic = "./totop.jpg"; #★ トップページ画像(相対パス) $toppic = "./twistersmap.jpg"; #★ バナー画像(相対パス) $bannerpic = "./banner.jpg"; #★ ロックファイル $lockfile = "lockfile_map"; #★ ツイスターズMAPトップ $formfile = "./twistersmap.cgi"; #★ このCGIファイル名 $cgifile = "./twistersmap.cgi"; #★ ログファイル $logfile = "./twistersmap.log"; #★ 画像の最大サイズ $maxW = 240; $maxH = 320; $maxD = int ($cgi_lib'maxdata / 1024); #★ クッキーのKEY $cookey = 'MAP'; #★ 性別テーブル @sex = ("男性","女性"); #★ 県テーブル @pref = ("海外","北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県", "茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県", "山梨県","長野県","新潟県","富山県","石川県","福井県", "岐阜県","静岡県","愛知県","三重県", "滋賀県","京都府","大阪府","兵庫県","奈良県","和歌山県", "鳥取県","島根県","岡山県","広島県","山口県", "香川県","徳島県","愛媛県","高知県", "福岡県","佐賀県","長崎県","熊本県","大分県","宮崎県","鹿児島県", "沖縄県"); #★ methodの形式 (POST or GET) $method = 'POST'; #★ 管理者用パスワード (英数字で8文字以内) $password = 'jou'; #★ 時間の設定 $now = time; #★ アクセス拒否するホスト名 @kick = ("*.host.ne.jp","*.host.com"); #********** MAIN ********** &KICK_HOST; &DECODE; &IN; &TIME; $navi = "■$toptitle"; if ($mode eq "regist") { &INPUT; } elsif ($mode eq "modify") { &INPUT; } elsif ($mode eq "save") { &CHK; &SAVE; &VIEW; } elsif ($mode eq "search") { &SEARCH; } elsif ($mode eq "list") { &LIST; } elsif ($mode eq "view") { &VIEW; } elsif (($mode eq "modpass")or($mode eq "delpass")) { &PASS; } elsif ($mode eq "delchk") { &DELCHK; } elsif ($mode eq "delete") { &DELETE; } elsif ($mode eq "top") { print "Location: $formfile\n\n"; exit; } else { &MAP; } exit; #********** IN SUB ********** sub IN { $mode = $in{'mode'}; $id = $in{'id'}; $nickname = $in{'nickname'}; $sex = $in{'sex'}; $name = $in{'name'}; $yyyy = $in{'yyyy'}; $mm = $in{'mm'}; $dd = $in{'dd'}; $zip = $in{'zip'}; $pref = $in{'pref'}; $address = $in{'address'}; $tel = $in{'tel'}; $url = $in{'url'}; $email = $in{'email'}; $passwd = $in{'passwd'}; $passwdchk = $in{'passwdchk'}; $delimg = $in{'delimg'}; $filename = $in{'filename'}; $comment = $in{'comment'}; $performer = $in{'performer'}; $presenter = $in{'presenter'}; $decorator = $in{'decorator'}; $lecture = $in{'lecture'}; $other = $in{'other'}; if ($performer eq "yes") { $detail = "パフォーマー"; } else { $detail = ""; }; if ($presenter eq "yes") { if ($detail eq "") { $detail = "プレゼンター"; } else { $detail = "$detail プレゼンター"; } } if ($decorator eq "yes") { if ($detail eq "") { $detail = "デコレーター"; } else { $detail = "$detail デコレーター"; } } if ($lecture eq "yes") { if ($detail eq "") { $detail = "バルーン教室"; } else { $detail = "$detail バルーン教室"; } } if ($other eq "yes") { if ($detail eq "") { $detail = "その他"; } else { $detail = "$detail その他"; } } } #********** MAP SUB ********** sub MAP { for ($count = 0; $count <= 47; $count++) { $map1[$count] = 0; } open(DB,"$logfile") || &ERROR("オープンできません。 : $logfile"); @lines = ; close(DB); $all = @lines; foreach (@lines) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$z) = split(/<>/, $_); $map1[$pref2]++; } for ($count = 0; $count <= 47; $count++) { if ($map1[$count] eq 0) { $map2[$count] = "map7"; } elsif ($map1[$count] > 5) { $map2[$count] = "map2"; } else { $map2[$count] = "map4"; } } &HEADER; print <<"_PRINT_"; 現在の登録者数は $all名 です。
 
      登録なし 北海道  
  1~5人  
  6人以上 青森
 



 
 
富山 新潟 福島
  福井 岐阜 長野 群馬 栃木
 
島根 鳥取
京都 滋賀 埼玉
広島 岡山


愛知 山梨 東京
 


福岡     和歌山   静岡 神奈川  

大分 愛媛 香川  
  宮崎 高知 徳島
鹿児島  
 
 
  沖縄   海外  
 

ツイストバルーンが好きな方ならレベルに関係なくどなたでも登録できます。
必須項目を入力するだけでも登録できるので、気楽に登録して下さい。
そして、バルーン仲間をどんどん増やしましょう。


_PRINT_ &FOOTER; } #********** INPUT SUB ********** sub INPUT { #変更の場合のデータを取得する if (($id ne "")&&($mode eq "modify")) { if ($passwd eq "") { &ERROR("パスワードが入力されていません。"); } open(DB,"$logfile")|| &ERROR("オープンできません。 : $logfile"); seek(DB,0,0); @line=; close(DB); $flag = 0; foreach $line(@line) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $line); if ($id eq $id2){ if ((&MATCH_PASS("$passwd","$passwd2") ne 'OK')&&($passwd ne $password)) { &ERROR("パスワードが間違っています。");} $flag = 1; $comment3 = $comment2; $comment3 =~s/
/\n/g; last; } } if ($flag eq 0) { &ERROR("該当するデータが見つかりません。"); } &SAVE_COOKIE; $label = "変更"; } else { $id2=$nickname2=$sex2=$name2=$yyyy2=$mm2=$dd2=$zip2=$pref2=$address2=$tel2=$url2=$email2=$performer2=$presenter2=$decorator2=$lecture2=$other2=$detail2=$comment2=$tail2=$w2=$h2=$passwd2=""; $label = "登録"; } &HEADER; print <<"_PRINT_";
_PRINT_ if (($mode eq "modify")&&(-e "./images/$id2$tail2")&&($tail2 eq ".gif" || $tail2 eq ".jpg" || $tail2 eq ".png")) { if ($w2 eq 0 || $w2 eq "") { $w2 = $maxW; } if ($h2 eq 0 || $h2 eq "") { $h2 = $maxH; } print <<"_PRINT_"; _PRINT_ } else { print <<"_PRINT_"; _PRINT_ } print <<"_PRINT_";
$labelフォーム
ニックネーム(本名可) (必須)
性別 _PRINT_ if ($sex2 eq 0) { print "男 女"; } elsif ($sex2 eq 1) { print "男 女"; } else { print "男 女"; } print <<"_PRINT_";  (必須)
本名
画 像
画像を削除
  ↑変更する場合のみご記入下さい。
画 像
誕生日 年 \n"; print "月 \n"; print "
(必須)
住所
電話番号
URL
↑半角英数字で正しくご記入下さい。
E-mail
↑半角英数字で正しくご記入下さい。
活動内容 _PRINT_ if ($performer2 eq "yes") { print "パフォーマー  \n"; } else { print "パフォーマー  \n"; } if ($presenter2 eq "yes") { print "プレゼンター  \n"; } else { print "プレゼンター  \n"; } if ($decorator2 eq "yes") { print "デコレーター
\n"; } else { print "デコレーター
\n"; } if ($lecture2 eq "yes") { print "バルーン教室  \n"; } else { print "バルーン教室  \n"; } if ($other2 eq "yes") { print "趣味・その他\n"; } else { print "趣味・その他\n"; } print <<"_PRINT_";
↑該当する活動内容にチェックを付けて下さい。(必須)
PR
↑自己紹介、宣伝、その他何かございましたらお書き下さい。
パスワード (英数字で8文字以内)(必須)
パスワード(確認用) (上と同じパスワードを入力)(必須)
  • タグは使用できません。
  • 半角カタカナは使用できません。
  • 画像は横 $maxWピクセル、縦 $maxHピクセルを超えると縮小表\示されます。
  • $maxD KBを超える画像はアップロードできません。

<必ずお読み下さい>
  • すべての項目を入力する必要はありません。
  • 本フォームより入力いただいた個人情報はパスワード以外全て公開されます。
    公開したくない項目については入力しないようお願いします。
  • 入力いただいた個人情報については、この$title以外で利用することはありません。
  • バルーン関係の場合のみ、商用利用・営利目的の登録、大歓迎です。
    ショップをお持ちの方、仕事の依頼をお受けしている方どんどん宣伝してください。
  • パスワードは忘れないようお願いします。こちらから教えることは致しません。

 
_PRINT_ &FOOTER; } #********** CHK SUB ********** sub CHK { if ($nickname eq "") { &ERROR("名前が入力されていません。"); } if ($sex eq "") { &ERROR("性別が選択されていません。"); } if ($pref eq "") { &ERROR("都道府県が選択されていません。"); } if (($email ne "")&&($email !~ /(.*)\@(.*)\.(.*)/)) { &ERROR("メールアドレスの入力が不正です。"); } if ($detail eq "") { &ERROR("活動内容が選択されていません。"); } if (length($name) > 20) { &ERROR("名前が長すぎます。20文字以内で入力して下さい。"); } if (length($nickname) > 20) { &ERROR("ニックネームが長すぎます。20文字以内で入力して下さい。"); } if (length($email) > 50) { &ERROR("メールアドレスが長すぎます。50文字以内で入力して下さい。"); } if ($passwd eq "") { &ERROR("パスワードが設定されていません。"); } if ($passwd ne $passwdchk) { &ERROR("パスワードが合っていません。"); } } #********** SAVE SUB ********** sub SAVE { $comment =~ s/\r\n/
/g; $comment =~ s/\r/
/g; $comment =~ s/\n/
/g; $url =~ s/^http\:\/\///; $agent = &GET_AGENT; &LOCK; open(DB,"$logfile") || &ERROR("オープンできません。 : $logfile"); @lines = ; close(DB); ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, @lines[0]); #if (($host2 eq $host)&&($time2+300 > $now)) { # &ERROR("5分以内の連続\申\し込み処理は禁止です"); #} if ($id eq "") { $id = $now; if ($id eq $id2) { &ERROR("登録に失敗しました。もう一度やり直してください。"); } } elsif (($filename)or($delimg eq "yes")) { if (-e "./images/$id\.jpg") { unlink("./images/$id\.jpg"); } if (-e "./images/$id\.png") { unlink("./images/$id\.png"); } if (-e "./images/$id\.gif") { unlink("./images/$id\.gif"); } $tail=$w=$h=""; } if ($filename) { &UPLOAD; } $passwd3 = &MAKE_PASS($passwd); local($flag) = 0; foreach (@lines) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $_); if ($id eq $id2) { &LOAD_COOKIE; if (($c_id ne $id2)or($c_passwd ne $passwd2)) { &ERROR("パスワードが正しくありません。"); } $flag = 1; if (($filename eq "")and($delimg ne "yes")and($tail2 ne "")) { $tail = $tail2; $w = $w2; $h = $h2; } push (@lines2,"$id<>$nickname<>$sex<>$name<>$yyyy<>$mm<>$dd<>$zip<>$pref<>$address<>$tel<>$url<>$email<>$performer<>$presenter<>$decorator<>$lecture<>$other<>$detail<>$comment<>$tail<>$w<>$h<>$passwd3<>$host<>$addr<>$agent<>$date<>$now<>\n"); } else { push (@lines2,$_); } } if ($flag eq 0) { push (@lines2,"$id<>$nickname<>$sex<>$name<>$yyyy<>$mm<>$dd<>$zip<>$pref<>$address<>$tel<>$url<>$email<>$performer<>$presenter<>$decorator<>$lecture<>$other<>$detail<>$comment<>$tail<>$w<>$h<>$passwd3<>$host<>$addr<>$agent<>$date<>$now<>\n"); } open(DB,">$logfile") || &ERROR("書き込みできません。 : $logfile"); print DB @lines2; close(DB); &UNLOCK; #&OK("登録手続きが無事終了しました。"); } #********** UPLOAD SUB ********** sub UPLOAD { local($macbin, $fname, $flag, $w2, $h2, $rate); $macbin=0; foreach (@in) { if (/(.*)Content-type:(.*)/i) { $tail=$2; } if (/(.*)filename=\"(.*)\"/i) { $fname=$2; } if (/application\/x-macbinary/i) { $macbin=1; } } $tail =~ s/\r//g; $tail =~ s/\n//g; $flag=0; if ($tail =~ /image\/gif/i) { $tail=".gif"; $flag=1; } if ($tail =~ /image\/p?jpeg/i) { $tail=".jpg"; $flag=1; } if ($tail =~ /image\/x-png/i) { $tail=".png"; $flag=1; } if (!$flag) { if ($fname =~ /\.gif$/i) { $tail=".gif"; $flag=1; } if ($fname =~ /\.jpe?g$/i) { $tail=".jpg"; $flag=1; } if ($fname =~ /\.png$/i) { $tail=".png"; $flag=1; } } if (!$flag || !$fname) { &ERROR("画像のアップロードに失敗しました。"); } if ($macbin) { $length = substr($filename,83,4); $length = unpack("%N",$length); $filename = substr($filename,128,$length); } $imgfile = "images/$id$tail"; if (!open(OUT,"> $imgfile")) { &ERROR("画像のアップロードに失敗しました。"); } binmode(OUT); binmode(STDOUT); print OUT $filename; close(OUT); chmod(0666,$imgfile); ($w, $h) = &SIZEGET($imgfile); if ($w > $maxW || $h > $maxH) { $w2 = $maxW / $w; $h2 = $maxH / $h; if ($w2 < $h2) { $rate = $w2; } else { $rate = $h2; } $w = int($w * $rate); if ($w < 1) { $w = 1; } $h = int($h * $rate); if ($h < 1) { $h = 1; } } } #********** SEARCH SUB ********** sub SEARCH { &HEADER; print <<"_PRINT_";
検索フォーム
ニックネーム (あいまい検索可)
性別
活動内容

 
_PRINT_ &FOOTER; } #********** VIEW SUB ********** sub VIEW{ if ($id eq "") { &ERROR("データが見つかりませんでした。"); } open(DB,"$logfile") || &ERROR("オープンできません。 : $logfile"); @lines = ; close(DB); local($flag) = 0; foreach (@lines) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $_); if ($id eq $id2) { $flag = 1; last; } } if ($flag eq 0) { &ERROR("データが見つかりませんでした。"); } &HEADER; if ($mode eq "save") { print <<"_PRINT_";
以下の内容で登録しました。

_PRINT_ } print <<"_PRINT_";
$nickname2
ニックネーム $nickname2 _PRINT_ if ((-e "./images/$id2$tail2")&&($tail2 eq ".gif" || $tail2 eq ".jpg" || $tail2 eq ".png")) { if ($w2 eq 0 || $w2 eq "") { $w2 = $maxW; } if ($h2 eq 0 || $h2 eq "") { $h2 = $maxH; } print "\n"; } else { print " \n"; } print <<"_PRINT_";
性別 $sex[$sex2]
本名 $name2 
誕生日 _PRINT_ $ymd = ""; if ($yyyy2 ne "") { $ymd = ("$yyyy2" . "年 "); } if ($mm2 ne "") { $ymd = ("$ymd" . "$mm2" . "月 "); } if ($dd2 ne "") { $ymd = ("$ymd" . "$dd2" . "日 "); } if ($ymd eq "") { $ymd = " "; } print <<"_PRINT_"; $ymd
$zip2 
住所 $pref[$pref2]  $address2 
電話番号 $tel2 
URL _PRINT_ if ($url2 ne "") { print "http://$url2"; } else { print " "; } print <<"_PRINT_";
E-mail _PRINT_ if ($email2 ne "") { print "$email2"; } else { print " "; } print <<"_PRINT_";
活動内容 $detail2 
PR $comment2 
[変更]  [削除] 
_PRINT_ if ($mode eq "save") { print <<"_PRINT_";
_PRINT_ } else { print <<"_PRINT_";
_PRINT_ } &FOOTER; exit; } #********** LIST SUB ********** sub LIST{ open(DB,"$logfile") || &ERROR("オープンできません。 : $logfile"); @lines = ; close(DB); local($flag) = 0; &HEADER; foreach (@lines) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $_); if (($nickname eq "") or ($nickname2 =~ /$nickname/)) { if (($pref eq "") or ($pref2 eq $pref)) { if (($sex eq "") or ($sex2 eq $sex)) { if (($detail eq "") or (($detail eq 1) and ($performer2 eq "yes")) or (($detail eq 2) and ($presenter2 eq "yes")) or (($detail eq 3) and ($decorator2 eq "yes")) or (($detail eq 4) and ($lecture2 eq "yes")) or (($detail eq 5) and ($other2 eq "yes"))) { &DETAIL; $flag = 1; } } } } } if ($flag eq 0) { print "
\n該当の登録がありません

\n"; } print "
\n"; print "\n"; print "
\n"; &FOOTER; exit; } #********** DETAIL SUB ********** sub DETAIL { $comment2 = &ALINK($comment2); print <<"_PRINT_";
ニックネーム $nickname2 性別 $sex[$sex2] 出身県 $pref[$pref2] [ 詳細 ]
活動内容 $detail2
_PRINT_ } #********** PASS SUB ********** sub PASS { if ($id eq "") { &ERROR("該当するデータが見つかりません。"); } &HEADER; print <<"_PRINT_";
パスワードの入力
パスワード:

_PRINT_ if ($mode eq "modpass") { print ""; } else { print ""; } print <<"_PRINT_";  
_PRINT_ &FOOTER; } #********** DELCHK SUB ********** sub DELCHK { if ($passwd eq "") { &ERROR("パスワードが入力されていません。"); } if ($id eq "") { &ERROR("該当するデータが見つかりません。"); } open(DB,"$logfile")|| &ERROR("オープンできません。 : $logfile"); seek(DB,0,0); @line=; close(DB); $flag = 0; foreach $line(@line) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $line); if ($id eq $id2){ $flag = 1; if ((&MATCH_PASS("$passwd","$passwd2") ne 'OK')&&($passwd ne $password)) { &ERROR("パスワードが間違っています。");} last; } } if ($flag eq 0) { &ERROR("該当するデータが見つかりません。"); } &SAVE_COOKIE; &HEADER; print <<"_PRINT_";


$nickname2 のデータを削除します。

よろしいですか?
 
_PRINT_ &FOOTER; } #********** DELETE SUB ********** sub DELETE { &LOCK; open(DB,"$logfile") || &ERROR("オープンできません。 : $logfile"); @lines = ; close(DB); if ($id eq "") { &ERROR("該当のデータが見つかりません。"); } if (-e "./images/$id\.jpg") { unlink("./images/$id\.jpg"); } if (-e "./images/$id\.png") { unlink("./images/$id\.png"); } if (-e "./images/$id\.gif") { unlink("./images/$id\.gif"); } local($flag) = 0; foreach (@lines) { ($id2,$nickname2,$sex2,$name2,$yyyy2,$mm2,$dd2,$zip2,$pref2,$address2,$tel2,$url2,$email2,$performer2,$presenter2,$decorator2,$lecture2,$other2,$detail2,$comment2,$tail2,$w2,$h2,$passwd2,$host2,$addr2,$agent2,$date2,$time2,$z) = split(/<>/, $_); if ($id eq $id2) { &LOAD_COOKIE; if (($c_id ne $id2)or($c_passwd ne $passwd2)) { &ERROR("パスワードが正しくありません。"); } $flag = 1; } else { push (@lines2,$_); } } if ($flag eq 0) { &ERROR("該当のデータが見つかりません。"); } open(DB,">$logfile") || &ERROR("書き込みできません。 : $logfile"); print DB @lines2; close(DB); &UNLOCK; &OK("削除手続きが無事終了しました。"); } #********** OK SUB ********** sub OK{ &HEADER; print <<"_PRINT_";

$_[0]

_PRINT_ &FOOTER; exit; } #********** ERROR SUB ********** sub ERROR { &UNLOCK($lockfile); &HEADER; print <<"_PRINT_";

エラー!!

$_[0]

_PRINT_ &FOOTER; exit; } #********** HEADER SUB ********** sub HEADER { print "Content-type: text/html\n\n"; print <<"_PRINT_"; $toptitle
_PRINT_ } #********** FOOTER SUB ********** sub FOOTER { print <<"_PRINT_";
(C)Japan Balloon Twisters Convention $holdyy All Rights Reserved.
_PRINT_ } #********** DECODE SUB ********** sub DECODE { local($name,$value); &ReadParse; while (($name,$value) = each(%in)) { if ($name ne "filename") { &jcode'convert(*value,'sjis'); $value =~ s//>/g; } $in{$name} = $value; } } #********** LOAD_COOKIE SUB ********** sub LOAD_COOKIE { $cookie = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/, $cookie); foreach $pair (@pairs) { local($key,$value) = split(/=/, $pair); $key =~ s/\s//g; $DUMMY{$key} = $value; } @pairs = split(/,/, $DUMMY{$cookey}); foreach $pair (@pairs) { local($key,$value) = split(/:/, $pair); $COOKIE{$key} = $value; } $c_id = $COOKIE{'id'}; $c_passwd = $COOKIE{'passwd'}; } #********** SAVE_COOKIE SUB ********** sub SAVE_COOKIE { #保存日数は1日間 ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 1*24*60*60); @mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @weekg = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); $date_gmt = sprintf("%s, %02d\-%s\-%04d %02d\:%02d\:%02d GMT",$weekg[$wdayg],$mdayg,$mong[$mong],$yearg+1900,$hourg,$ming,$secg); $cook = "id\:$id2\,passwd\:$passwd2"; print "Set-Cookie: $cookey\=$cook; expires=$date_gmt\n"; } #********** TIME SUB ********** sub TIME { $ENV{'TZ'} = "JST-9"; $now = time; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon++; $week = ('日','月','火','水','木','金','土') [$wday]; $japandate = "$year年$mon月$mday日($week曜日) $hour時$min分"; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year\/$mon\/$mday($week) $hour\:$min"; } #********** SIZEGET SUB ********** sub SIZEGET { local($fname, $d, $m, $c, $l, $w, $h); $fname = "@_"; if ($fname =~ /\.jpg$/i) { open(JPEG, "$fname") || return (0,0); binmode JPEG; read(JPEG, $d, 2); while (1) { read(JPEG, $d, 4); ($m, $c, $l) = unpack("a a n", $d); if ($m ne "\xFF") { $w = $h = 0; last; } elsif ((ord($c) >= 0xC0) && (ord($c) <= 0xC3)) { read(JPEG, $d, 5); ($h, $w) = unpack("xnn", $d); last; } else { read(JPEG, $d, ($l - 2)); } } close(JPEG); return ($w, $h); } elsif ($fname =~ /\.gif$/i) { open(GIF,"$fname") || return (0,0); binmode(GIF); sysread(GIF,$d,10); close(GIF); if ($d =~ /^GIF/) { $d = substr($d,-4); } $w = unpack("v",substr($d,0,2)); $h = unpack("v",substr($d,2,2)); return ($w, $h); } elsif ($fname =~ /\.png$/i) { open(PNG, "$fname") || return (0,0); binmode(PNG); read(PNG, $d, 24); close(PNG); $w = unpack("N", substr($d, 16, 20)); $h = unpack("N", substr($d, 20, 24)); return ($w, $h); } } #********** LOCK SUB ********** sub LOCK { $c = 0; while(-f "$lockfile") { $c++; if ($c >= 20) { unlink($lockfile); &ERROR('BUSY');} sleep(1); } open(LOCK,">$lockfile"); close(LOCK); } #********** UNLOCK SUB ********** sub UNLOCK { if (-e $lockfile) { unlink($lockfile); } } #********** ALINK SUB ********** sub ALINK { local($text) = $_[0]; &jcode'convert(*text,'sjis'); $text =~ s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\#]+)/$1<\/A>/ig; $text =~ s/(ftp:\/\/[\w\.\~\-\/]+)/$1<\/A>/ig; $text =~ s/([\w\.\-]+)\@([\w\.\-]+)/$1\@$2<\/A>/ig; &jcode'convert(*text,'sjis'); return $text; } #********** MAKE_PASS SUB ********** sub MAKE_PASS { local($form_pass) = @_; srand(); $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; $salt = substr($xx, int(rand(64)), 1); $salt .= substr($xx, int(rand(64)), 1); return crypt($form_pass, $salt); } #********** MATCH_PASS SUB ********** sub MATCH_PASS { local($form_pass,$log_pass) = @_; if ($log_pass =~ /^\$1\$/) { $pass_key = 3; } else { $pass_key = 0; } if (crypt($form_pass, substr($log_pass,$pass_key,2)) eq "$log_pass") { return 'OK'; } else { return 'NG'; } } #********** KICK_HOST SUB ********** sub KICK_HOST { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2); } local($match) = 0; foreach (@kick) { $_ =~ s/\*/\.\*/g; if ($host =~ /$_/) { $match=1; last; } if ($addr =~ /$_/) { $match=1; last; } } if ($match) { &ERROR("このホストはアクセスできません"); } } #********** GET_HOST SUB ********** sub GET_HOST { local($host) = $ENV{'REMOTE_HOST'}; if ($host eq '') { $host = $ENV{'REMOTE_ADDR'}; } return $host; } #********** GET_AGENT SUB ********** sub GET_AGENT { local($agent) = $ENV{'HTTP_USER_AGENT'}; return $agent; } #********** DEBUG SUB ********** sub DEBUG { open (DB,"debug.log") ; seek(DB,0,0); @debug = ; close(DB); (@debug < 50) || (@debug = @debug[0 .. 48]); local($debugpoint) = @_; unshift(@debug,"$debugpoint\n"); open(DB,">debug.log") ; eval 'flock(DB,2);'; seek(DB,0,0); print DB @debug; eval 'flock(DB,8);'; close(DB); }