1

我在 Perl 中创建了一个将文件上传到服务器的 CGI 脚本。该脚本完美运行:

my $upload_filehandle = $query->upload("config");

if (!$upload_filehandle)
{
    die "Configuration file could not be loaded";
}

open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
    print UPLOADFILE;
}

close UPLOADFILE;

问题是我不想将文件存储到服务器上,而只想将其部分内容存储在 Perl 脚本中的一些变量中。我不知道该怎么做。我尝试了以下代码:

my @array;
my $upload_filehandle = $query->upload("config");

if (!$upload_filehandle)
{
    die "Configuration file could not be loaded";
}

open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
    push @array, $_;
}


close UPLOADFILE;

我想将文件内容存储在一个数组中,但它给出了一个错误:

[Sat Aug 31 18:03:27 2013] [error] [client 127.0.0.1] malformed header from script. Bad      header=\xff\xd8\xff\xe11\xdcExif: loadConfig.cgi, referer: http://localhost/cgi-bin/uploadFile.cgi

我认为它是在线的 push @array, $_; ,这可能是因为文件的标题无法识别。

您对如何在不保存文件的情况下存储文件内容有任何想法吗?

预先感谢您的回复。

4

1 回答 1

1

看起来您正试图\xff\xd8\xff\xe11\xdcExif在正确的 HTTP 标头之前打印文件 ():

print $query->header;

我已经稍微整理了你的脚本,这很好用:

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use CGI::Carp 'fatalsToBrowser';

my $query = CGI->new;

my $upload_filehandle = $query->upload("config")
    or die "Configuration file could not be loaded";


my @array = <$upload_filehandle>;

print $query->header;

use Data::Dumper;
print Dumper(\@array);
于 2013-08-31T17:00:47.157 回答