event refactor, landing on HEAD!
[freeside.git] / httemplate / elements / fckeditor / editor / filemanager / browser / default / connectors / perl / upload_fck.pl
diff --git a/httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl b/httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl
new file mode 100644 (file)
index 0000000..1c3f4e2
--- /dev/null
@@ -0,0 +1,667 @@
+#####\r
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
+#  Copyright (C) 2003-2007 Frederico Caldeira Knabben\r
+#\r
+#  == BEGIN LICENSE ==\r
+#\r
+#  Licensed under the terms of any of the following licenses at your\r
+#  choice:\r
+#\r
+#   - GNU General Public License Version 2 or later (the "GPL")\r
+#     http://www.gnu.org/licenses/gpl.html\r
+#\r
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
+#     http://www.gnu.org/licenses/lgpl.html\r
+#\r
+#   - Mozilla Public License Version 1.1 or later (the "MPL")\r
+#     http://www.mozilla.org/MPL/MPL-1.1.html\r
+#\r
+#  == END LICENSE ==\r
+#\r
+#  This is the File Manager Connector for Perl.\r
+#####\r
+\r
+# image data save dir\r
+$img_dir       = './temp/';\r
+\r
+\r
+# File size max(unit KB)\r
+$MAX_CONTENT_SIZE =  30000;\r
+\r
+# Filelock (1=use,0=not use)\r
+$PM{'flock'}           = '1';\r
+\r
+\r
+# upload Content-Type list\r
+my %UPLOAD_CONTENT_TYPE_LIST = (\r
+       'image/(x-)?png'                                                =>      'png',  # PNG image\r
+       'image/p?jpe?g'                                                 =>      'jpg',  # JPEG image\r
+       'image/gif'                                                             =>      'gif',  # GIF image\r
+       'image/x-xbitmap'                                               =>      'xbm',  # XBM image\r
+\r
+       'image/(x-(MS-)?)?bmp'                                  =>      'bmp',  # Windows BMP image\r
+       'image/pict'                                                    =>      'pict', # Macintosh PICT image\r
+       'image/tiff'                                                    =>      'tif',  # TIFF image\r
+       'application/pdf'                                               =>      'pdf',  # PDF image\r
+       'application/x-shockwave-flash'                 =>      'swf',  # Shockwave Flash\r
+\r
+       'video/(x-)?msvideo'                                    =>      'avi',  # Microsoft Video\r
+       'video/quicktime'                                               =>      'mov',  # QuickTime Video\r
+       'video/mpeg'                                                    =>      'mpeg', # MPEG Video\r
+       'video/x-mpeg2'                                                 =>      'mpv2', # MPEG2 Video\r
+\r
+       'audio/(x-)?midi?'                                              =>      'mid',  # MIDI Audio\r
+       'audio/(x-)?wav'                                                =>      'wav',  # WAV Audio\r
+       'audio/basic'                                                   =>      'au',   # ULAW Audio\r
+       'audio/mpeg'                                                    =>      'mpga', # MPEG Audio\r
+\r
+       'application/(x-)?zip(-compressed)?'    =>      'zip',  # ZIP Compress\r
+\r
+       'text/html'                                                             =>      'html', # HTML\r
+       'text/plain'                                                    =>      'txt',  # TEXT\r
+       '(?:application|text)/(?:rtf|richtext)' =>      'rtf',  # RichText\r
+\r
+       'application/msword'                                    =>      'doc',  # Microsoft Word\r
+       'application/vnd.ms-excel'                              =>      'xls',  # Microsoft Excel\r
+\r
+       ''\r
+);\r
+\r
+# Upload is permitted.\r
+# A regular expression is possible.\r
+my %UPLOAD_EXT_LIST = (\r
+       'png'                                   =>      'PNG image',\r
+       'p?jpe?g|jpe|jfif|pjp'  =>      'JPEG image',\r
+       'gif'                                   =>      'GIF image',\r
+       'xbm'                                   =>      'XBM image',\r
+\r
+       'bmp|dib|rle'                   =>      'Windows BMP image',\r
+       'pi?ct'                                 =>      'Macintosh PICT image',\r
+       'tiff?'                                 =>      'TIFF image',\r
+       'pdf'                                   =>      'PDF image',\r
+       'swf'                                   =>      'Shockwave Flash',\r
+\r
+       'avi'                                   =>      'Microsoft Video',\r
+       'moo?v|qt'                              =>      'QuickTime Video',\r
+       'm(p(e?gv?|e|v)|1v)'    =>      'MPEG Video',\r
+       'mp(v2|2v)'                             =>      'MPEG2 Video',\r
+\r
+       'midi?|kar|smf|rmi|mff' =>      'MIDI Audio',\r
+       'wav'                                   =>      'WAVE Audio',\r
+       'au|snd'                                =>      'ULAW Audio',\r
+       'mp(e?ga|2|a|3)|abs'    =>      'MPEG Audio',\r
+\r
+       'zip'                                   =>      'ZIP Compress',\r
+       'lzh'                                   =>      'LZH Compress',\r
+       'cab'                                   =>      'CAB Compress',\r
+\r
+       'd?html?'                               =>      'HTML',\r
+       'rtf|rtx'                               =>      'RichText',\r
+       'txt|text'                              =>      'Text',\r
+\r
+       ''\r
+);\r
+\r
+\r
+# sjis or euc\r
+my $CHARCODE = 'sjis';\r
+\r
+$TRANS_2BYTE_CODE = 0;\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+# Form Read input\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+sub read_input\r
+{\r
+eval("use File::Copy;");\r
+eval("use File::Path;");\r
+\r
+       my ($FORM) = @_;\r
+\r
+\r
+       mkdir($img_dir,0777);\r
+       chmod(0777,$img_dir);\r
+\r
+       undef $img_data_exists;\r
+       undef @NEWFNAMES;\r
+       undef @NEWFNAME_DATA;\r
+\r
+       if($ENV{'CONTENT_LENGTH'} > 10000000 || $ENV{'CONTENT_LENGTH'} > $MAX_CONTENT_SIZE * 1024) {\r
+               &upload_error(\r
+                       'Size Error',\r
+                       sprintf(\r
+                               "Transmitting size is too large.MAX <strong>%d KB</strong> Now Size <strong>%d KB</strong>(<strong>%d bytes</strong> Over)",\r
+                               $MAX_CONTENT_SIZE,\r
+                               int($ENV{'CONTENT_LENGTH'} / 1024),\r
+                               $ENV{'CONTENT_LENGTH'} - $MAX_CONTENT_SIZE * 1024\r
+                       )\r
+               );\r
+       }\r
+\r
+       my $Buffer;\r
+       if($ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/) {\r
+               # METHOD POST only\r
+               return  unless($ENV{'CONTENT_LENGTH'});\r
+\r
+               binmode(STDIN);\r
+               # STDIN A pause character is detected.'(MacIE3.0 boundary of $ENV{'CONTENT_TYPE'} cannot be trusted.)\r
+               my $Boundary = <STDIN>;\r
+               $Boundary =~ s/\x0D\x0A//;\r
+               $Boundary = quotemeta($Boundary);\r
+               while(<STDIN>) {\r
+                       if(/^\s*Content-Disposition:/i) {\r
+                               my($name,$ContentType,$FileName);\r
+                               # form data get\r
+                               if(/\bname="([^"]+)"/i || /\bname=([^\s:;]+)/i) {\r
+                                       $name = $1;\r
+                                       $name   =~ tr/+/ /;\r
+                                       $name   =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;\r
+                                       &Encode(\$name);\r
+                               }\r
+                               if(/\bfilename="([^"]*)"/i || /\bfilename=([^\s:;]*)/i) {\r
+                                       $FileName = $1 || 'unknown';\r
+                               }\r
+                               # head read\r
+                               while(<STDIN>) {\r
+                                       last    if(! /\w/);\r
+                                       if(/^\s*Content-Type:\s*"([^"]+)"/i || /^\s*Content-Type:\s*([^\s:;]+)/i) {\r
+                                               $ContentType = $1;\r
+                                       }\r
+                               }\r
+                               # body read\r
+                               $value = "";\r
+                               while(<STDIN>) {\r
+                                       last    if(/^$Boundary/o);\r
+                                       $value .= $_;\r
+                               };\r
+                               $lastline = $_;\r
+                               $value =~s /\x0D\x0A$//;\r
+                               if($value ne '') {\r
+                                       if($FileName || $ContentType) {\r
+                                               $img_data_exists = 1;\r
+                                               (\r
+                                                       $FileName,              #\r
+                                                       $Ext,                   #\r
+                                                       $Length,                #\r
+                                                       $ImageWidth,    #\r
+                                                       $ImageHeight,   #\r
+                                                       $ContentName    #\r
+                                               ) = &CheckContentType(\$value,$FileName,$ContentType);\r
+\r
+                                               $FORM{$name}    = $FileName;\r
+                                               $new_fname              = $FileName;\r
+                                               push(@NEWFNAME_DATA,"$FileName\t$Ext\t$Length\t$ImageWidth\t$ImageHeight\t$ContentName");\r
+\r
+                                               # Multi-upload correspondence\r
+                                               push(@NEWFNAMES,$new_fname);\r
+                                               open(OUT,">$img_dir/$new_fname");\r
+                                               binmode(OUT);\r
+                                               eval "flock(OUT,2);" if($PM{'flock'} == 1);\r
+                                               print OUT $value;\r
+                                               eval "flock(OUT,8);" if($PM{'flock'} == 1);\r
+                                               close(OUT);\r
+\r
+                                       } elsif($name) {\r
+                                               $value  =~ tr/+/ /;\r
+                                               $value  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;\r
+                                               &Encode(\$value,'trans');\r
+                                               $FORM{$name} .= "\0"                    if(defined($FORM{$name}));\r
+                                               $FORM{$name} .= $value;\r
+                                       }\r
+                               }\r
+                       };\r
+                       last if($lastline =~ /^$Boundary\-\-/o);\r
+               }\r
+       } elsif($ENV{'CONTENT_LENGTH'}) {\r
+               read(STDIN,$Buffer,$ENV{'CONTENT_LENGTH'});\r
+       }\r
+       foreach(split(/&/,$Buffer),split(/&/,$ENV{'QUERY_STRING'})) {\r
+               my($name, $value) = split(/=/);\r
+               $name   =~ tr/+/ /;\r
+               $name   =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;\r
+               $value  =~ tr/+/ /;\r
+               $value  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;\r
+\r
+               &Encode(\$name);\r
+               &Encode(\$value,'trans');\r
+               $FORM{$name} .= "\0"                    if(defined($FORM{$name}));\r
+               $FORM{$name} .= $value;\r
+\r
+       }\r
+\r
+}\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+#      CheckContentType\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+sub CheckContentType\r
+{\r
+\r
+       my($DATA,$FileName,$ContentType) = @_;\r
+       my($Ext,$ImageWidth,$ImageHeight,$ContentName,$Infomation);\r
+       my $DataLength = length($$DATA);\r
+\r
+       # An unknown file type\r
+\r
+       $_ = $ContentType;\r
+       my $UnknownType = (\r
+               !$_\r
+               || /^application\/(x-)?macbinary$/i\r
+               || /^application\/applefile$/i\r
+               || /^application\/octet-stream$/i\r
+               || /^text\/plane$/i\r
+               || /^x-unknown-content-type/i\r
+       );\r
+\r
+       # MacBinary(Mac Unnecessary data are deleted.)\r
+       if($UnknownType || $ENV{'HTTP_USER_AGENT'} =~ /Macintosh|Mac_/) {\r
+               if($DataLength > 128 && !unpack("C",substr($$DATA,0,1)) && !unpack("C",substr($$DATA,74,1)) && !unpack("C",substr($$DATA,82,1)) ) {\r
+                       my $MacBinary_ForkLength = unpack("N", substr($$DATA, 83, 4));          # ForkLength Get\r
+                       my $MacBinary_FileName = quotemeta(substr($$DATA, 2, unpack("C",substr($$DATA, 1, 1))));\r
+                       if($MacBinary_FileName && $MacBinary_ForkLength && $DataLength >= $MacBinary_ForkLength + 128\r
+                                       && ($FileName =~ /$MacBinary_FileName/i || substr($$DATA,102,4) eq 'mBIN')) {   # DATA TOP 128byte MacBinary!!\r
+                               $$DATA                          = substr($$DATA,128,$MacBinary_ForkLength);\r
+                               my $ResourceLength      = $DataLength - $MacBinary_ForkLength - 128;\r
+                               $DataLength                     = $MacBinary_ForkLength;\r
+                       }\r
+               }\r
+       }\r
+\r
+       # A file name is changed into EUC.\r
+#      &jcode::convert(\$FileName,'euc',$FormCodeDefault);\r
+#      &jcode::h2z_euc(\$FileName);\r
+       $FileName =~ s/^.*\\//;                                 # Windows, Mac\r
+       $FileName =~ s/^.*\///;                                 # UNIX\r
+       $FileName =~ s/&/&amp;/g;\r
+       $FileName =~ s/"/&quot;/g;\r
+       $FileName =~ s/</&lt;/g;\r
+       $FileName =~ s/>/&gt;/g;\r
+#\r
+#      if($CHARCODE ne 'euc') {\r
+#              &jcode::convert(\$FileName,$CHARCODE,'euc');\r
+#      }\r
+\r
+       # An extension is extracted and it changes into a small letter.\r
+       my $FileExt;\r
+       if($FileName =~ /\.(\w+)$/) {\r
+               $FileExt = $1;\r
+               $FileExt =~ tr/A-Z/a-z/;\r
+       }\r
+\r
+       # Executable file detection (ban on upload)\r
+       if($$DATA =~ /^MZ/) {\r
+               $Ext = 'exe';\r
+       }\r
+       # text\r
+       if(!$Ext && ($UnknownType || $ContentType =~ /^text\//i || $ContentType =~ /^application\/(?:rtf|richtext)$/i || $ContentType =~ /^image\/x-xbitmap$/i)\r
+                               && ! $$DATA =~ /[\000-\006\177\377]/) {\r
+#              $$DATA =~ s/\x0D\x0A/\n/g;\r
+#              $$DATA =~ tr/\x0D\x0A/\n\n/;\r
+#\r
+#              if(\r
+#                      $$DATA =~ /<\s*SCRIPT(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*(?:.|\n)*?\bONLOAD\s*=(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*(?:.|\n)*?\bONCLICK\s*=(?:.|\n)*?>/i\r
+#                              ) {\r
+#                      $Infomation = '(JavaScript contains)';\r
+#              }\r
+#              if($$DATA =~ /<\s*TABLE(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*BLINK(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*MARQUEE(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*OBJECT(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*EMBED(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*FRAME(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*APPLET(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*FORM(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*(?:.|\n)*?\bSRC\s*=(?:.|\n)*?>/i\r
+#                              || $$DATA =~ /<\s*(?:.|\n)*?\bDYNSRC\s*=(?:.|\n)*?>/i\r
+#                              ) {\r
+#                      $Infomation = '(the HTML tag which is not safe is included)';\r
+#              }\r
+\r
+               if($FileExt =~ /^txt$/i || $FileExt =~ /^cgi$/i || $FileExt =~ /^pl$/i) {                                                               # Text File\r
+                       $Ext = 'txt';\r
+               } elsif($ContentType =~ /^text\/html$/i || $FileExt =~ /html?/i || $$DATA =~ /<\s*HTML(?:.|\n)*?>/i) {  # HTML File\r
+                       $Ext = 'html';\r
+               } elsif($ContentType =~ /^image\/x-xbitmap$/i || $FileExt =~ /^xbm$/i) {                                                                # XBM(x-BitMap) Image\r
+                       my $XbmName = $1;\r
+                       my ($XbmWidth, $XbmHeight);\r
+                       if($$DATA =~ /\#define\s*$XbmName\_width\s*(\d+)/i) {\r
+                               $XbmWidth = $1;\r
+                       }\r
+                       if($$DATA =~ /\#define\s*$XbmName\_height\s*(\d+)/i) {\r
+                               $XbmHeight = $1;\r
+                       }\r
+                       if($XbmWidth && $XbmHeight) {\r
+                               $Ext = 'xbm';\r
+                               $ImageWidth             = $XbmWidth;\r
+                               $ImageHeight    = $XbmHeight;\r
+                       }\r
+               } else {                #\r
+                       $Ext = 'txt';\r
+               }\r
+       }\r
+\r
+       # image\r
+       if(!$Ext && ($UnknownType || $ContentType =~ /^image\//i)) {\r
+               # PNG\r
+               if($$DATA =~ /^\x89PNG\x0D\x0A\x1A\x0A/) {\r
+                       if(substr($$DATA, 12, 4) eq 'IHDR') {\r
+                               $Ext = 'png';\r
+                               ($ImageWidth, $ImageHeight) = unpack("N2", substr($$DATA, 16, 8));\r
+                       }\r
+               } elsif($$DATA =~ /^GIF8(?:9|7)a/) {                                                                                                                    # GIF89a(modified), GIF89a, GIF87a\r
+                       $Ext = 'gif';\r
+                       ($ImageWidth, $ImageHeight) = unpack("v2", substr($$DATA, 6, 4));\r
+               } elsif($$DATA =~ /^II\x2a\x00\x08\x00\x00\x00/ || $$DATA =~ /^MM\x00\x2a\x00\x00\x00\x08/) {   # TIFF\r
+                       $Ext = 'tif';\r
+               } elsif($$DATA =~ /^BM/) {                                                                                                                                              # BMP\r
+                       $Ext = 'bmp';\r
+               } elsif($$DATA =~ /^\xFF\xD8\xFF/ || $$DATA =~ /JFIF/) {                                                                                # JPEG\r
+                       my $HeaderPoint = index($$DATA, "\xFF\xD8\xFF", 0);\r
+                       my $Point = $HeaderPoint + 2;\r
+                       while($Point < $DataLength) {\r
+                               my($Maker, $MakerType, $MakerLength) = unpack("C2n",substr($$DATA,$Point,4));\r
+                               if($Maker != 0xFF || $MakerType == 0xd9 || $MakerType == 0xda) {\r
+                                       last;\r
+                               } elsif($MakerType >= 0xC0 && $MakerType <= 0xC3) {\r
+                                       $Ext = 'jpg';\r
+                                       ($ImageHeight, $ImageWidth) = unpack("n2", substr($$DATA, $Point + 5, 4));\r
+                                       if($HeaderPoint > 0) {\r
+                                               $$DATA = substr($$DATA, $HeaderPoint);\r
+                                               $DataLength = length($$DATA);\r
+                                       }\r
+                                       last;\r
+                               } else {\r
+                                       $Point += $MakerLength + 2;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       # audio\r
+       if(!$Ext && ($UnknownType || $ContentType =~ /^audio\//i)) {\r
+               # MIDI Audio\r
+               if($$DATA =~ /^MThd/) {\r
+                       $Ext = 'mid';\r
+               } elsif($$DATA =~ /^\x2esnd/) {         # ULAW Audio\r
+                       $Ext = 'au';\r
+               } elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {\r
+                       my $HeaderPoint = index($$DATA, "RIFF", 0);\r
+                       $_ = substr($$DATA, $HeaderPoint + 8, 8);\r
+                       if(/^WAVEfmt $/) {\r
+                               # WAVE\r
+                               if(unpack("V",substr($$DATA, $HeaderPoint + 16, 4)) == 16) {\r
+                                       $Ext = 'wav';\r
+                               } else {                                        # RIFF WAVE MP3\r
+                                       $Ext = 'mp3';\r
+                               }\r
+                       } elsif(/^RMIDdata$/) {                 # RIFF MIDI\r
+                               $Ext = 'rmi';\r
+                       } elsif(/^RMP3data$/) {                 # RIFF MP3\r
+                               $Ext = 'rmp';\r
+                       }\r
+                       if($ContentType =~ /^audio\//i) {\r
+                               $Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';\r
+                       }\r
+               }\r
+       }\r
+\r
+       # a binary file\r
+       unless ($Ext) {\r
+               # PDF image\r
+               if($$DATA =~ /^\%PDF/) {\r
+                       # Picture size is not measured.\r
+                       $Ext = 'pdf';\r
+               } elsif($$DATA =~ /^FWS/) {             # Shockwave Flash\r
+                       $Ext = 'swf';\r
+               } elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {\r
+                       my $HeaderPoint = index($$DATA, "RIFF", 0);\r
+                       $_ = substr($$DATA,$HeaderPoint + 8, 8);\r
+                       # AVI\r
+                       if(/^AVI LIST$/) {\r
+                               $Ext = 'avi';\r
+                       }\r
+                       if($ContentType =~ /^video\//i) {\r
+                               $Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';\r
+                       }\r
+               } elsif($$DATA =~ /^PK/) {                      # ZIP Compress File\r
+                       $Ext = 'zip';\r
+               } elsif($$DATA =~ /^MSCF/) {            # CAB Compress File\r
+                       $Ext = 'cab';\r
+               } elsif($$DATA =~ /^Rar\!/) {           # RAR Compress File\r
+                       $Ext = 'rar';\r
+               } elsif(substr($$DATA, 2, 5) =~ /^\-lh(\d+|d)\-$/) {            # LHA Compress File\r
+                       $Infomation .= "(lh$1)";\r
+                       $Ext = 'lzh';\r
+               } elsif(substr($$DATA, 325, 25) eq "Apple Video Media Handler" || substr($$DATA, 325, 30) eq "Apple \x83\x72\x83\x66\x83\x49\x81\x45\x83\x81\x83\x66\x83\x42\x83\x41\x83\x6E\x83\x93\x83\x68\x83\x89") {\r
+                       # QuickTime\r
+                       $Ext = 'mov';\r
+               }\r
+       }\r
+\r
+       # Header analysis failure\r
+       unless ($Ext) {\r
+               # It will be followed if it applies for the MIME type from the browser.\r
+               foreach (keys %UPLOAD_CONTENT_TYPE_LIST) {\r
+                       next unless ($_);\r
+                       if($ContentType =~ /^$_$/i) {\r
+                               $Ext = $UPLOAD_CONTENT_TYPE_LIST{$_};\r
+                               $ContentName = &CheckContentExt($Ext);\r
+                               if(\r
+                                       grep {$_ eq $Ext;} (\r
+                                               'png',\r
+                                               'gif',\r
+                                               'jpg',\r
+                                               'xbm',\r
+                                               'tif',\r
+                                               'bmp',\r
+                                               'pdf',\r
+                                               'swf',\r
+                                               'mov',\r
+                                               'zip',\r
+                                               'cab',\r
+                                               'lzh',\r
+                                               'rar',\r
+                                               'mid',\r
+                                               'rmi',\r
+                                               'au',\r
+                                               'wav',\r
+                                               'avi',\r
+                                               'exe'\r
+                                       )\r
+                               ) {\r
+                                       $Infomation .= ' / Header analysis failure';\r
+                               }\r
+                               if($Ext ne $FileExt && &CheckContentExt($FileExt) eq $ContentName) {\r
+                                       $Ext = $FileExt;\r
+                               }\r
+                               last;\r
+                       }\r
+               }\r
+               # a MIME type is unknown--It judges from an extension.\r
+               unless ($Ext) {\r
+                       $ContentName = &CheckContentExt($FileExt);\r
+                       if($ContentName) {\r
+                               $Ext = $FileExt;\r
+                               $Infomation .= ' /      MIME type is unknown('. $ContentType. ')';\r
+                               last;\r
+                       }\r
+               }\r
+       }\r
+\r
+#      $ContentName = &CheckContentExt($Ext)   unless($ContentName);\r
+#      if($Ext && $ContentName) {\r
+#              $ContentName .=  $Infomation;\r
+#      } else {\r
+#              &upload_error(\r
+#                      'Extension Error',\r
+#                      "$FileName A not corresponding extension ($Ext)<BR>The extension which can be responded ". join(',', sort values(%UPLOAD_EXT_LIST))\r
+#              );\r
+#      }\r
+\r
+#      # SSI Tag Deletion\r
+#      if($Ext =~ /.?html?/ && $$DATA =~ /<\!/) {\r
+#              foreach (\r
+#                      'config',\r
+#                      'echo',\r
+#                      'exec',\r
+#                      'flastmod',\r
+#                      'fsize',\r
+#                      'include'\r
+#              ) {\r
+#                      $$DATA =~ s/\#\s*$_/\&\#35\;$_/ig\r
+#              }\r
+#      }\r
+\r
+       return (\r
+               $FileName,\r
+               $Ext,\r
+               int($DataLength / 1024 + 1),\r
+               $ImageWidth,\r
+               $ImageHeight,\r
+               $ContentName\r
+       );\r
+}\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+# Extension discernment\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+\r
+sub CheckContentExt\r
+{\r
+\r
+       my($Ext) = @_;\r
+       my $ContentName;\r
+       foreach (keys %UPLOAD_EXT_LIST) {\r
+               next    unless ($_);\r
+               if($_ && $Ext =~ /^$_$/) {\r
+                       $ContentName = $UPLOAD_EXT_LIST{$_};\r
+                       last;\r
+               }\r
+       }\r
+       return $ContentName;\r
+\r
+}\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+# Form decode\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+sub Encode\r
+{\r
+\r
+       my($value,$Trans) = @_;\r
+\r
+#      my $FormCode = &jcode::getcode($value) || $FormCodeDefault;\r
+#      $FormCodeDefault ||= $FormCode;\r
+#\r
+#      if($Trans && $TRANS_2BYTE_CODE) {\r
+#              if($FormCode ne 'euc') {\r
+#                      &jcode::convert($value, 'euc', $FormCode);\r
+#              }\r
+#              &jcode::tr(\r
+#                      $value,\r
+#                      "\xA3\xB0-\xA3\xB9\xA3\xC1-\xA3\xDA\xA3\xE1-\xA3\xFA",\r
+#                      '0-9A-Za-z'\r
+#              );\r
+#              if($CHARCODE ne 'euc') {\r
+#                      &jcode::convert($value,$CHARCODE,'euc');\r
+#              }\r
+#      } else {\r
+#              if($CHARCODE ne $FormCode) {\r
+#                      &jcode::convert($value,$CHARCODE,$FormCode);\r
+#              }\r
+#      }\r
+#      if($CHARCODE eq 'euc') {\r
+#              &jcode::h2z_euc($value);\r
+#      } elsif($CHARCODE eq 'sjis') {\r
+#              &jcode::h2z_sjis($value);\r
+#      }\r
+\r
+}\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+# Error Msg\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+\r
+sub upload_error\r
+{\r
+\r
+       local($error_message)   = $_[0];\r
+       local($error_message2)  = $_[1];\r
+\r
+       print "Content-type: text/html\n\n";\r
+       print<<EOF;\r
+<HTML>\r
+<HEAD>\r
+<TITLE>Error Message</TITLE></HEAD>\r
+<BODY>\r
+<table border="1" cellspacing="10" cellpadding="10">\r
+       <TR bgcolor="#0000B0">\r
+       <TD bgcolor="#0000B0" NOWRAP><font size="-1" color="white"><B>Error Message</B></font></TD>\r
+       </TR>\r
+</table>\r
+<UL>\r
+<H4> $error_message </H4>\r
+$error_message2 <BR>\r
+</UL>\r
+</BODY>\r
+</HTML>\r
+EOF\r
+       &rm_tmp_uploaded_files;                 # Image Temporary deletion\r
+       exit;\r
+}\r
+\r
+##############################################################################\r
+# Summary\r
+#\r
+# Image Temporary deletion\r
+#\r
+# Parameters\r
+# Returns\r
+# Memo\r
+##############################################################################\r
+\r
+sub rm_tmp_uploaded_files\r
+{\r
+       if($img_data_exists == 1){\r
+               sleep 1;\r
+               foreach $fname_list(@NEWFNAMES) {\r
+                       if(-e "$img_dir/$fname_list") {\r
+                               unlink("$img_dir/$fname_list");\r
+                       }\r
+               }\r
+       }\r
+\r
+}\r
+1;\r