请教perl cgi上传文件的问题?

请教perl cgi上传文件的问题?

我上传三个文件,结果只有第一个文件写入了内容,而后面两个却是空文件,大家帮我看看吧 !谢谢!
代码如下:
upload.html
<html>

<body>

<form method="POST" action="/cgi-bin/upload.cgi"
ENCTYPE="multipart/form-data">

File 1:

<input type="file" name="FILE1">

<br>

File 2:

<input type="file" name="FILE2">

<br>

File 3:

<input type="file" name="FILE3">

<br>

<input type="submit" value="Upload!">

</form>

</body>

</html>


upload.cgi
#!/usr/bin/perl

use CGI;

$upfilecount = 1;

$maxuploadcount = 3; #限制上传文件的最大数

$basedir = "/var/www/cgi-bin/"; #上传的文件存放地址

$allowall = "no"; #是否不限制文件后缀上传

@theext =(".zip",".exe",".gif"); #要限制的文件后缀名

print "Content-type: text/html\n\n";

while ($upfilecount <= $maxuploadcount) {
my $req = new CGI;

my $file = $req->param("FILE$upfilecount");

if ($file ne "") {

my $fileName = $file;

$fileName =~ s/^.*(\\|\/)//; #用正则表达式去除无用的路径名,得到文件名

my $newmain = $fileName;

my $filenotgood;

if ($allowall ne "yes") {

$extname = lc(substr($newmain,length($newmain) - 4,4)); #取后缀名

for(my $i = 0; $i < @theext; $i++){ #这段进行后缀名检测

if ($extname eq $theext[$i]){

$filenotgood = "yes";

last;

}

}

}

if ($filenotgood ne "yes") { #这段开始上传

open (OUTFILE, ">$basedir/$fileName");
#print "$fileName\n";

binmode(OUTFILE);
#务必全用二进制方式,这样就可以放心上传二进制文件了。而且文本文件也不会受干扰
while (read($file,  $buffer, 1024)) {

print OUTFILE $buffer;

}

close (OUTFILE);
print "$fileName";
system("bl2seq -i $fileName -j /home/zrz/Desktop/$fileName -p blastn -o junk");
#system("rm $fileName");
$message.=$file . " 已成功上传!<br>\n";

}

else{

$message.=$file . " 文件后缀不符合要求,上传失败!<br>\n";

}

}
$upfilecount++;
}

print $message; #最后输出上传信息
你这是*nix上编的吧,我还没这个环境,不能帮你看了
ding
while ($upfilecount <= $maxuploadcount) {
my $req = new CGI;

在while里new CGI ? 一个就够了吧
在while里new CGI ? 一个就够了吧
那要写几个?还写在哪
谢谢提醒,了可以了,把my $req = new CGI;写在while外面就可以了
我直接把楼主的程序拿过来,可以运行~
但是上传后,可以在服务器上建立文件,但是是空文件~
这是怎么回事儿~
主要是最近升级了apache~~~
以前运行都正常
现在出这问题,怎么回事儿啊~~~
多谢~
在本论坛搜索下吧。。呵呵:)
这么一段程序我看到了好几个安全漏洞
呵呵