#=====================================# # ライブラリ(なんちゃって鶯教ver) # #=====================================# #------------------------------------# # 全角数字を半角数字に変換する処理 # #------------------------------------# sub henkan{ # SJIS変換の場合 $_[0] =~ s/\x82\x4F/0/g; $_[0] =~ s/\x82\x50/1/g; $_[0] =~ s/\x82\x51/2/g; $_[0] =~ s/\x82\x52/3/g; $_[0] =~ s/\x82\x53/4/g; $_[0] =~ s/\x82\x54/5/g; $_[0] =~ s/\x82\x55/6/g; $_[0] =~ s/\x82\x56/7/g; $_[0] =~ s/\x82\x57/8/g; $_[0] =~ s/\x82\x58/9/g; } #----------------------# # パスワード暗号処理 # #----------------------# # パスワード送信 sub encrypt { local($inpw) = $_[0]; local(@SALT, $salt, $encrypt); @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; $encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt); return $encrypt; } #----------------------# # パスワード照合処理 # #----------------------# # 送信されたパスワード、ログパスワード sub decrypt { local($inpw, $logpw) = @_; local($salt, $key, $check); $salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); $check = "no"; if (crypt($inpw, $salt) eq "$logpw" || crypt($inpw, '$1$' . $salt) eq "$logpw") { $check = "yes"; } return $check; } #------------------# # エンコード処理 # #------------------# sub encode{ $_[0] =~ s/([\x00-\x1F\x7F\x80-\xff])/"%" . unpack("H2", $1)/eg; } #----------------------------# # フォームからのデータ処理 # #----------------------------# sub decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { # 荒らし対策エラー if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); } 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; # SJISへ変換・半角カナを全角カナへ変換 &jcode'convert(*value,'sjis'); &jcode'h2z_sjis(*value); # checkboxを配列に積む if ($name eq 'delete') { push(@delete,$value); } # タグ変換処理(用途に合わせて削除) $value =~ s//>/g; # $value =~ s/\r\n/
/g; # $value =~ s/\n/
/g; # $value =~ s/\r/
/g; # $value =~ s/,/,/g; $FORM{$name} = $value; } # 特別処理を記述 $FORM{'naiyo'} =~ s/\r\n/
/g; $FORM{'naiyo'} =~ s/\n/
/g; $FORM{'naiyo'} =~ s/\r/
/g; } #------------------# # 月の開始曜日取得 # #------------------# # 年、月、日(1)を送る # return 1:日 2:月 3:火 4:水 5:木 6:金 7:土 sub get_start { local($y,$m,$d) = @_; if($m < 3){ $y--; $m+=12; } return(($y+int($y/4)-int($y/100)+int($y/400)+int((13*$m+8)/5)+$d)%7); } #----------------# # ホスト名取得 # #----------------# sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq $addr) { # IPアドレスからホスト名を逆引き $host = gethostbyaddr(pack("C4",split(/\./,$addr)),2) || $addr; } } #--------------# # 時間の取得 # #--------------# sub get_time { $ENV{'TZ'} = "JST-9"; local($times) = time; local($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy,$dmy) = localtime($times); local(@week) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 日時のフォーマット local($date) = sprintf("%04d\/%02d\/%02d\(%s\) %02d\:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); return $date; } #----------# # 現在時刻 # #----------# sub time_get { $ENV{'TZ'} = "JST-9"; return time(); } #--------------# # エラー処理 # #--------------# sub error { print "\n"; print "\n"; print "

ERROR !

\n"; print "$_[0]\n"; print "


\n"; print "\n"; exit; } #--------------# # ロック処理 # #--------------# sub lock{ if($_[0] == 2){ foreach (1..10){ if(-z $LOCK){ if(!open(LOCK,">>" . $LOCK)){ exit; } print LOCK $$; close(LOCK); if(!open(LOCK)){ exit; } $dummy=; close(LOCK); if($dummy eq $$){ $lock = 1; return 1; } } $times=(stat($LOCK))[9]; $timer=time - 60; if($times <= $timer){ open(LOCK,">" . $LOCK)&&close(LOCK); }else{ sleep 1; } } }elsif($_[0] == 8){ open(LOCK,">" . $LOCK)&&close(LOCK); $lock = $r = (); return 1 ; } } 1;