#=====================================#
# ライブラリ(なんちゃって鶯教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/>/>/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 "