#!/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;
$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/’/\'/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;