#!/usr/bin/perl # ******** 共用プログラム ******** use Jcode; # ******** データ受信 と デコード ******** sub io_decode{ #print "DEBUG-00g-011
\n"; # ---- データ受信 ---- if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $g_str, $ENV{'CONTENT_LENGTH'}); }else { $g_str = $ENV{'QUERY_STRING'}; } #print "DEBUG-00g-012 - 参考:受信データ原文 -
$g_str
\n"; if($g_str =~ /Content-Disposition: form-data;/i){ # ENCTYPE = "multipart/form-data" による場合 &io0_decodesp; } else{ #print "DEBUG-00g-014
\n"; # ---- 受信データをペア(Name と VALUE)に分割、配列作成 ----- my @part = split('&', $g_str); # ---- 受信データ、各ペア(NAME - VALUE)のデコード ---- foreach my $i(@part) { # ---- ペア(NAME と VALUE)の分割 ---- ($variable, $value) = split('=', $i); &io0_decode1; } } } sub io0_decode1{ #print "DEBUG 00ga-151 - $variable - $value
\n"; # ----「 + 」に変換されているスペースを戻す(tr:文字の置換) $value =~ tr/+/ /; # ---- % 16 進数( 2 桁)を単純な 16 進数にデコード(s:文字列の置換) $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; # ---- jcode.pl(日本語変換ソフト)による日本語コードの統一(S-JIS)---- # $value = Jcode->new($value)->h2z->utf8; # ---- 改行コードの統一(UNIX)---- $value =~ s/\015\012/\012/g; $value =~ s/\015/\012/g; # ---- HTML タグコードの使用回避(特殊記号の使用)----- $value =~ s//>/g; # ---- 文字列区切りコードの使用回避(特殊記号の使用)----- $value =~ s/\"/”/g; $value =~ s/\'/’/g; #print "DEBUG 00ga-152 - $variable - $value
\n"; # ---- 複数選択項目(同一NAME)の配列・一覧作成 ---- $check=0; for(my $i=0; $i<$multi_item;$i++){ if($variable eq $multi_name[$i]){ my $j = $multi_nmbr[$i]; $multi_table[$i*$multi_max+$j] = $value; $multi_nmbr[$i]++; $check=1; last; } } # ---- 単数選択項目(各NAME)のハッシュ変数(NAME と VALUE 対応表)作成 if($check==0){ $cgi{$variable} = $value; } #print "DEBUG 00ga-153 - $variable - $value
\n"; } # ENCTYPE = "multipart/form-data" による場合 sub io0_decodesp{ my $bound="Content-Disposition: form-data;"; my @parts = split(/$bound/, $g_str); $upfileno=0; # $upfilettl=0; foreach my $i(@parts){ my @form=split(/\r\n/,$i); #print "DEBUG-03 /// 0-$form[0] /// 1-$form[1] /// 2-$form[2] /// 3-$form[3] /// 4-$form[4] /// 5-$form[5]
\n"; if($form[0]=~ /name="(.*)"; filename="(.*)"/i){ my $filestr=$form[0]; my @path=split(/\\/,$filestr); my $size=@path; if($size<=1){ #****変更**** $g_upfilename[$upfileno]="----"; $g_upfilevalue[$upfileno]="----"; } else{ $upfilename1=$path[$size-1]; my $len=length($upfilename1); $g_upfilename[$e_upfileno]=substr($upfilename1,0,$len-1); $g_upfilevalue[$e_upfileno]=$form[3]; my $end1=@form; for(my $t=4;$t<$end1-1;$t++){ $g_upfilevalue[$e_upfileno]=$g_upfilevalue[$e_upfileno]."\r\n".$form[$t]; } # $upfilettl++; } $g_upfileno++; #print "DEBUG-04 - $upfileno -$upfilename[$upfileno]
-$upfilevalue[$upfileno]

\n"; } elsif($form[0]=~ /name="(.*)"/i){ my $len=length($form[0])-8; $variable=substr($form[0],7,$len); # $inName=substr($form[0],7,$len); #print "DEBUG-05 - $len
\n"; $value=$form[2]; my $end1=@form; for(my $t=3;$t<$end1-1;$t++){ $value=$value."\r\n".$form[$t]; } #print "DEBUG 00ga-14 - $variable - $value

\n"; &io0_decode1; } } } sub io_upfile{ my (@upfilelist) = @_; $errmsg=""; #print "DEBUG 00io10 31 - $g_upfileno
@upfilelist
@g_upfilename
@g_upfilevalue\n"; $errref3 = "入出力エラー: - dd_ioupfile"; for(my $i=0;$i<$g_upfileno;$i++){ if($g_upfilename[$i] ne "----" && $upfilelist[$i] ne ""){ $size = &io_filewrite("0",$upfilelist[$i],""); # f1_FILE if($size !~ m/Error/){ print f1_FILE "$g_upfilevalue[$i]"; close(f1_FILE); } else{ $errmsg = $errmsg."
".$i." - ".$upfilelist[$i]." - ".$size; } } } if($errmsg ne ""){ &io_errexit($errmsg,$errref3,$g_manager); } } # ********* メッセージ表\示 ********* sub io_dspexit{ my ($dspmsg) = @_; $dspmsg =~ s/<//g; $dspmsg =~ s/”/\"/g; $dspmsg =~ s/’/\'/g; $dspmsg =~ s/\n/
/g; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "メッセージ表示\n"; print "\n"; print "
\n"; print "$date_min

\n"; print "$dspmsg\n"; print "
\n"; print "\n"; exit; } sub io_textexit{ my ($dspmsg) = @_; $dspmsg =~ s//>/g; $dspmsg =~ s/”/\"/g; $dspmsg =~ s/’/\'/g; $dspmsg =~ s/\n/
/g; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "メッセージ表示\n"; print "\n"; print "
\n"; print "$date_min

\n"; print "$dspmsg\n"; print "
\n"; print "\n"; exit; } # ******** メール発信 ******** sub io_mailtext{ my ($mailfrom,$mailto,$mailsbjct,$mailmsg) = @_; #$mailing=$mail_path." -t -f".$mailfrom." ".$mail_to; # ========== begin ============ $mailpath = "/usr/lib/sendmail"; # ========== end ============ $mailmsg =~ s/<//g; $mailmsg =~ s/”/\"/g; $mailmsg =~ s/’/\'/g; $mailmsg =~ s/
/\n/g; my $mailsbjct1 = Jcode->new($mailsbjct)->h2z->jis; my $mailmsg1 = Jcode->new($mailmsg)->h2z->jis; my @mailto1 = split("\;",$mailto); my $nmbr = @mailto1; #print "DEBUG 00io10 sub mail_form - $nmbr - @mailto
\n"; for(my $i=0;$i<$nmbr;$i++){ #print "DEBUG 00io10 sub mail_form - $mail_sbjct - $nmbr - $i - $mailto[$i]
\n"; $mailinst=$mailpath." ".$mailto1[$i]; open(MAIL, "| $mailinst"); print MAIL "From: $mailfrom\n"; print MAIL "To: $mailto1[$i]\n"; print MAIL "Subject: $mailsbjct1\n\n"; print MAIL "$mailmsg1\n"; close(MAIL); } } # ******** メール発信(HTML) ******** sub io_mailhtml{ my ($mailfrom,$mailto,$mailsbjct,$mailmsg) = @_; # ========== begin ============ $mailpath = "/usr/lib/sendmail"; # ========== end ============ $mailmsg =~ s/<//g; $mailmsg =~ s/”/\"/g; $mailmsg =~ s/’/\'/g; $mailmsg =~ s/\n/
/g; my $mailsbjct1 = Jcode->new($mailsbjct)->h2z->jis; my $mailmsg1 = Jcode->new($mailmsg)->h2z->jis; $mailmsg1 =~ s/=/=3D/g; $mailmsg2 = "\n"; $mailmsg2 = $mailmsg2."\n"; $mailmsg2 = $mailmsg2."HTML Mail\n"; $mailmsg2 = $mailmsg2."\n"; $mailmsg2 = $mailmsg2.$mailmsg1."\n"; $mailmsg2 = $mailmsg2."\n"; $mailinst = $mailpath." ".$mailto; open(MAIL, "| $mailinst"); print MAIL "From: $mailfrom\n"; print MAIL "To: $mailto\n"; print MAIL "Subject: $mailsbjct1\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Type: text/html; charset='iso-2022-jp'\n"; print MAIL "Content-Transfer-Encoding: quoted-printable\n\n"; print MAIL "$mailmsg2\n"; close(MAIL); } # ******** エラー表示(管理メール) ******** sub io_errexit{ my ($errmsg,$errref,$manager) = @_; if($g_str eq ""){ $errmsg = "送信内容が受信されていません。\n\n".$errmsg; } $mailsbjct = "ManagerMail(Error) - sub io_errexit - ".$errref."\n"; $mailmsg = $mailsbjct."\n\n".$errmsg."\n\n"; $mailmsg=$mailmsg."REMOTE_HOST:".$ENV{'REMOTE_HOST'}."\n"; $mailmsg=$mailmsg."REMOTE_ADDR:".$ENV{'REMOTE_ADDR'}."\n"; $mailmsg=$mailmsg."REMOTE_USER:".$ENV{'REMOTE_USER'}."\n"; $mailmsg=$mailmsg."SERVER_NAME:".$ENV{'SERVER_NAME'}."\n\n"; $mailmsg=$mailmsg."受信内容:".$g_str."\n"; if($manager ne ""){ &io_mailtext($manager,$manager,$mailsbjct,$mailmsg); } &io_dspexit($errmsg); } # ******** ファイル読取・書込・追記 ******** sub io_fileread{ my ($size,$file1,$out) = @_; $errref3 = "ファイル読取エラー: - io_fileread"; $errmsg = ""; if(-e $file1){ #print "DEBUG sub io_fileread 02 - $size - $file1 - $out
\n"; if(open(f1_FILE, "$file1")){ splice(@f2_LINES,0); #print "DEBUG sub io_fileread 03 - $size - $file1 - $out
\n"; if($size eq "0"){ #print "DEBUG sub io_fileread 04 - $size - $f2_LINES[0]
$f2_LINES[1]
\n"; return($size); # open のみ } elsif($size+0 > 0 && $size+0 < 100){ for(my $g=0;$g<$size;$g++){ $f2_LINES[$g] = ; } #print "DEBUG sub io_fileread 05 - $size - $f2_LINES[0]
$f2_LINES[1]
\n"; } else{ @f2_LINES = ; $size = @f2_LINES; #print "DEBUG sub io_fileread 06 - $size - $f2_LINES[0]
$f2_LINES[1]
\n"; } #print "DEBUG sub io_fileread 08 - $size - $f2_LINES[0]
$f2_LINES[1]
\n"; close(f1_FILE); } else{ $errmsg="Error、".$file1.":読取ファイルを開くことが出来ません。
アクセス制限を確かめてください。\n"; } } else{ $errmsg="Error、".$file1.":読取ファイルがありません。
パス・ファイル名を確かめてください。\n"; } if($errmsg eq ""){return($size);} elsif($out eq "err"){&io_errexit($errmsg,$errref3,$g_manager);} else{return($errmsg);} } sub io_filewrite{ my ($size,$file1,$out) = @_; $errref3 = "入出力エラー: - io_filewrite"; $errmsg = ""; # &io_lockup($io_lockfile,"err"); if(open(f1_FILE, ">$file1")){ #print "DEBUG 00io10 sub io_filewrite 03 - $file1 - $size - $out
@f1_LINES
\n"; if($size eq "0"){ return($size); # open のみ } elsif($size+0 > 0 && $size+0 < 100){ ; } else{ $size = @f1_LINES; } #print "DEBUG 00io10 sub io_filewrite 05 - $file1 - $size - $out
@f1_LINES
\n"; for(my $f=0;$f<$size;$f++){ $_=$f1_LINES[$f]; chomp($_); $_ =~ s/\n/
/g; $_ = $_."\n"; print f1_FILE $_; } close(f1_FILE); } else{ $errmsg="Error、".$file1.":書込ファイルを開くことが出来ません。
アクセス制限を確かめてください。\n"; } # &io_unlock($io_lockfile,"err"); if($errmsg eq ""){return($size);} elsif($out eq "err"){&io_errexit($errmsg,$errref3,$g_manager);} else{return($errmsg);} } sub io_filenewcr{ my ($size,$file1,$out) = @_; if(-e $file1){ $errref3 = "入出力エラー: - io_filenewcr"; $msg="Error、".$file1.":同じコードのファイルが既に存在します。\n"; if($out eq "err"){ &io_errexit($msg,$errref3,$g_manager); } } else{ $msg = &io_filewrite($size,$file1,$out); } return($msg); } sub io_fileoverwr{ my ($size,$file1,$out) = @_; if(-e $file1){ $msg = &io_filewrite($size,$file1,$out); } else{ $errref3 = "入出力エラー: - io_fileoverwr"; $msg="Error、".$file1.":同じコードのファイルが存在しません。\n
パス・ファイル名を確かめてください。"; if($out eq "err"){ &io_errexit($msg,$errref3,$g_manager); } } return($msg); } sub io_fileadd{ my ($size,$file1,$out) = @_; print "Content-type:text/html\n\n"; $errref3 = "入出力エラー: - io_fileadd"; $errmsg = ""; #print "DEBUG sub io_fileadd 01 - $work - $file1 - $size - $f1_LINES[0]
\n"; if(-e $file1){ # &io_lockup($io_lockfile,"err"); if(open(f1_FILE, ">>$file1")){ #print "DEBUG sub io_fileadd 02 - $work - $file1 - $size - $f1_LINES[0]
\n"; if($size eq "0"){ return($size); # open のみ } elsif($size+0 > 1 && $size+0 < 99){ #print "DEBUG sub io_fileadd 03 - $work - $file1 - $size - $f1_LINES[0]
\n"; ; } else{ $size = @f1_LINES; #print "DEBUG sub io_fileadd 04 - $work - $file1 - $size - $f1_LINES[0]
\n"; } #print "DEBUG sub io_fileadd 05 - $work - $file1 - $size - $f1_LINES[0]
\n"; for(my $f=0;$f<$size;$f++){ $_=$f1_LINES[$f]; chomp($_); $_ =~ s/\n/
/g; $_ = $_."\n"; print f1_FILE $_; } close(f1_FILE); } else{ $errmsg="Error、".$file1.":書込ファイルを開くことが出来ません。
アクセス制限を確かめてください。\n"; } # &io_unlock($io_lockfile,"err"); } else{ $errmsg="Error、".$file1.":同じコードのファイルが存在しません。
パス・ファイル名を確かめてください。\n"; } if($errmsg eq ""){return($size);} elsif($out eq "err"){&io_errexit($errmsg,$errref3,$g_manager);} else{return($errmsg);} } # 180 # ******** ロック、設定・解除 ******** sub io_lockup{ my ($lockfile,$out) = @_; #print "DEBUG 00io10 90 $lock_file - $out
\n"; my $errref3 = "入出力エラー: - io_lockup"; my $errmsg = ""; if(-e $lockfile){ if(-r $lockfile){ if(-w $lockfile){ # 10 秒待ちの後中断、ただし、当初 60 秒以前のロックは誤操作として無視・修正 my $time0=time+0; my $lockstatus="current time - ".$time0."\n\n"; for(my $k=0;$k<10;$k++){ open(f1_LOCK, "$lockfile"); my $time1 = ; $time1 = $time1+0; print $time1; $lockstatus = $lockstatus."oldlock ".$k." - ".$time1."\n"; if($time1 == 0 || $time0 > $time1 + 60){ close(f1_LOCK); open(f1_LOCK, ">$lockfile"); print f1_LOCK "$time0\n"; $lockstatus = $lockstatus."newlock ".$k." - ".$time0."\n"; close(f1_LOCK); return($lockstatus); } else{ sleep(1); } } $errmsg="Error、".$lockfile.":\n\n関連ファイルが他で使用されています。\nこの表\示を閉じ、60秒後再度「送信」をお願いします。\n\n".$lockstatus."\n\n"; close(f1_LOCK); } else{ $errmsg="Error、".$lockfile.":ロックファイルが開きません。
アクセス制限(書込)を確かめてください。\n"; } } else{ $errmsg="Error、".$lockfile.":ロックファイルが開きません。
アクセス制限(読取)を確かめてください。\n"; } } else{ $errmsg="Error、".$lockfile.":ロックファイルがありません。
パス・ファイル名を確かめてください。\n"; } if($out eq "err"){ &io_errexit($errmsg,$errref3,$g_manager); } else{ return($errmsg); } } sub io_unlock{ my ($lockfile,$out) = @_; #print "DEBUG0002-08 $op - $lock_file
\n"; my $errmsg = ""; my $errref3 = "入出力エラー: - io_unlock"; if(open(f1_LOCK, "$lockfile")){ $time1 = ; close(f1_LOCK); my $lockstatus="before unlock - ".$time1."\n"; open(f1_LOCK, ">$lockfile"); print f1_LOCK "0\n"; close(f1_LOCK); open(f1_LOCK, "$lockfile"); $time1 = ; $lockstatus=$lockstatus."
after unlock - ".$time1."\n"; close(f1_LOCK); return($lockstatus); } else{ $errmsg="Error、".$lockfile.":ロックファイルが開きません。
パス、ファイル名、アクセス制限を確かめてください。\n"; } if($out eq "err"){ &io_errexit($errmsg,$errref3,$g_manager); } else{ return($errmsg); } } # ******** ファイル表示 ******** sub io_dirslistdsp{ my (@dirslist) = @_; #print "DEBUG sub 10 - io_dirslistdsp - $work - @dirslist
\n"; $f2_filenmbr = &io_dirsfilelist(@dirslist); #print "DEBUG sub 20 - io_dirslistdsp - $f2_filenmbr - @f2_filelist
\n"; $dspmsg = "(ディレクトリ:(@dirslist)"; &io_filelistdsp($f2_filenmbr,@f2_filelist); } sub io_dirsfilelist{ my (@dirslist) = @_; $dirsnmbr = @dirslist; splice @f2_filelist; for(my $i=0;$i<$dirsnmbr;$i++){ if($dirslist[$i] eq ""){next;} $file1 = $dirslist[$i]."*.*"; @filelist1 = glob($file1); $f2_filenmbr = push @f2_filelist, @filelist1; } return($f2_filenmbr); } sub io_filelistdsp{ my ($filenmbr,@filelist) = @_; #print "DEBUG sub 10 - io_filelistdsp - $filenmbr - @filelist
\n"; $dspmsg = "ファイルリスト".$dspmsg." 総数:".$filenmbr.")

"; for(my $i=0; $i<$filenmbr;$i++){ $dspmsg=$dspmsg."".$filelist[$i]."
"; } $dspmsg = $dspmsg."\n"; #print "DEBUG sub 20 - io_filelistdsp - $filenmbr - @filelist
\n"; &io_dspexit($dspmsg); } sub io_filedsp{ my ($file1) = @_; #print "DEBUG sub io_filedsp - $work - $file1
\n"; $dspmsg=""; $size = &io_fileread("",$file1,"err"); #print "DEBUG sub io_filedsp - $size - @f2_LINES[0]
\n"; for(my $i=0;$i<$size;$i++){ $dspmsg=$dspmsg.$f2_LINES[$i]; } print "Content-type: text/html\n\n"; print $dspmsg; exit; } sub io_imgdsp{ my ($file1) = @_; $size = -s $file1; if(open(FILE, "$file1")){ binmode(FILE); $w = read(FILE,$buffer,$size); close(FILE); binmode(STDOUT); print "Content-type:img/gif\n\n"; print "$buffer"; } else{ print "Content-type: text/html\n\n"; print "work = $work:$file1 開きません。"; } } 1;