1

ファイルをサーバーにアップロードする CGI スクリプトを Perl で作成しました。スクリプトは完全に機能します。

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 に答える