プロが教えるわが家の防犯対策術!

ファイルをアップロードしたいCGIが欲しく
サンプルをみつけたのですが、このCGIだと
ファイルをアップロードしたときに、ファイル名がアップロードした時刻になってしまいます。
ファイル名を変更することなく、アップロードするにはどう変更すればよいのでしょうか?
お願いします。ちなみにアップロードしたいファイルの種類はエクセル形式のファイルです。

プログラムは以下のようになってます。

#!/usr/bin/env perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use POSIX qw(strftime);
my $q = new CGI;
print $q->header(), $q->start_html();
#print $q->dump; # for debug
my $outputdir = "log"; # ファイルを置く先 (ディレクトリ)
my $fh = $q->param('uploaded_file');
my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子
if ($fh ne "") {
my $timestamp = strftime "%y%m%d%H%M%S", localtime;
my $outputfn = "$outputdir/$timestamp$ex";
open(F, "> $outputfn") or die;
flock(F, 2);
if (defined $fh) {
while (<$fh>) {
print F $_;
}
}
close F;
print qq{saved as <a href="$outputfn">$outputfn</a>};
}
print $q->start_multipart_form(-name => 'myform'),
$q->filefield(-name => 'uploaded_file'),
$q->submit("OK"),
$q->endform,
$q->end_html(), "\n";

A 回答 (2件)

下記の様に、myを前に付ける事。



my $uploadname = $fh;
my @pathary = split(/\\/, $uploadname);
my $lastpos = @pathary;

それと、こっちの方が正解かもな。
やってみんと分からんが。
my @pathary = split(/\//, $uploadname);
    • good
    • 0
この回答へのお礼

できました。ありがとうございます。
しかし日本語のファイル名をアップロードすると
ファイル名が文字化けそしてファイル自体が壊れてしまいます
もうこれはしかたないことなんでしょうか

お礼日時:2008/01/29 23:19

(旧)


my $outputfn = "$outputdir/$timestamp$ex";
(新)
$uploadname = $fh;
chomp($uploadname);
@pathary = split(/\\/, $uploadname);
$lastpos = @pathary;
$uploadname = $pathary[$lastpos-1];
my $outputfn = "$outputdir/$uploadname";

コピペばかりしてると池沼になるぞ。www
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記のように書き換えると
Software error
とでて
Global symbol "$uploadname" requires explicit package name at C:\・・・・
のようなエラーが変更した箇所にでます
何が原因でしょうか?

お礼日時:2008/01/28 20:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!