-3

次のようなアップロード用のcgiスクリプトがあります

#!/usr/bin/perl
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;
my $file = $cgi->param('file');
$file=~m/^.*(\\|\/)(.*)/; # strip the remote path and keep the filename
my $name = $2;
open(LOCAL, ">/home/Desktop/$name") or die $!;

while(<$file>) {
  $data .= $_;
}
print $cgi->header();
print "$file has been successfully uploaded... thank you.\n";
    print $data;

HTMLファイルは以下の通り

<html>
<head>
    <title>Test</title>
</head>

<body>
    <form enctype="multipart/form-data" action="upload.cgi" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
            Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
</body>
</html>

私は今、奇妙なエラーが発生しています..

ソフトウェア エラー:

htdocs/upload.cgi 9 行目のディレクトリです。

ヘルプが必要な場合は、このエラー メッセージとエラーの日時を記載して、このサイトのウェブ マスターにメールを送信してください。

4

2 に答える 2

0

解決に近づくためのいくつかの提案。

  • use strictそしてuse warnings(常にこれらを使用してください)。
  • CGI->new()の代わりにnew CGI(必須ではありませんが、良い習慣です)。
  • ファイル アップロード フォームの入力は「userfile」と呼ばれますが、CGI コードでは「file」と呼びます。その不一致は修正する必要があります。
  • でファイル名を$cgi->param('file')取得すると、ファイル名が正しく取得されます (前のポイントでエラーを修正したら) が、後でそのファイル名をファイル ハンドル ( while (<$file>)) として処理しようとします。それはうまくいきません。
  • おそらく、 CGI.pm を使用してファイル アップロード フィールドを処理する方法に関するドキュメントを読む必要があります。
于 2013-10-18T09:38:10.670 に答える