#!/usr/local/bin/perl -w # # upload_cfg.cgi # Example for POST request of "rt.httprequest" # # Copyright (C) 2010 YAMAHA CORPORATION. All rights reserved. # # $Revision: 1.1 $ # $Date: 2010/03/12 09:06:22 $ # # モジュール読み込み use strict; use CGI; use CGI::Carp qw(carpout); use File::Path; # POSTサイズの上限 $CGI::POST_MAX = 3 * 1024 * 1024; # 3MB my $query = new CGI; ### 初期設定 ### # 最大許容サイズ(KByte) my $maxsize = 2560; # ファイル名の最大長 my $maxfilelen = 32; my $localtime = localtime(); ### 送られてきたデータを処理する ### # アップロードの取得 my $file = $query->upload('config') ? $query->upload('config') : ""; if (!$file) { # POST_MAXのエラーチェック if ($query->cgi_error) { my $err = $query->cgi_error; &error("$err") if ($err); } } # 添付ファイル名の取得 my $savefile = $file; # 添付ファイル名のエラーチェック $savefile =~ s/\r//; $savefile =~ s/\n//; &error("500 File transfer error.") unless (defined($file)); # ファイルサイズの取得 my $size = (stat($file))[7]; # サイズ制限 &error("500 Filesize is too large. Max $maxsize KB") if ($size > $maxsize * 1024); ### ファイル保存 ### my ($buffer); open (OUT, ">./$savefile") || die "Can't open $savefile!"; binmode (OUT); print "Content-type: text/plain\n\n"; while (read($file, $buffer, 1024)) { if ($CGI::OS eq 'UNIX') { $buffer =~ s/\r\n/\n/g; # 改行コードの変換 } print OUT $buffer; } close (OUT); close ($file) if ($CGI::OS ne 'UNIX'); # Windows用 chmod (0666, "$savefile"); exit; ### エラー出力 ### # エラーメッセージを返す # sub error_html { my ($err_mes) = @_; print "Content-type: text/html\r\n"; print "Status: $err_mes\r\n"; print "\r\n"; exit; } sub error { my ($err_mes) = $_[0]; open (OUT, ">>error.txt") || die "Can't open error.txt!"; print OUT "[$localtime] "; print OUT $err_mes; print OUT " from $ENV{'REMOTE_ADDR'}($ENV{'HTTP_USER_AGENT'})\n"; close(OUT); error_html($err_mes); exit; } __END__