ファイルアップローダー

Perlは現在勉強中の言語でわからないことが多いです。画像の登録等で使いそうなファイルアップローダーを作ってみました。CGIがおいてあるディレクトリのuploadディレクトリ以下にファイルをアップロードできます。uploadのパーミッションは777等で実行してください。ただし、エラー処理やファイルの大きさチェック等全くしていないのでここまま使うのは大変危険です。あくまで踏み台ということで。

#!/usr/bin/perl

use CGI;

main();

sub main() {
    my $buffer;
    my $query = CGI->new();
    my $file = $query->param('file');
    my $file_name = ($file =~ /([^\\\/:]+)$/) ? $1 : 'uploadedd.bin';
    
    #ファイルが指定されていないときはフォームを表示
    if (length($file) == 0) {
        print "Content-Type: text/html\n\n";
        print "<html><head><title>file uploader</title></head><body>\n";
        print "<form action=\"./upload.cgi\" method=\"post\" ";
        print "enctype=\"multipart/form-data\">\n";
        print "<input type=\"file\" name=\"file\">\n";
        print "<input type=\"submit\">\n";
        print "</form>\n";
        print "</body></html>\n";
    #ファイルが指定されているときはアップロード
    } else {
        print "Content-Type: text/html\n\n";
        print "<html><head><title>file uploader</title></head><body>\n";
        open(OUT, ">./upload/$file_name") or die(qq(Can't open "$file_name".));
        binmode OUT;
        while (read($file, $buffer, 1024)) {
            print OUT $buffer;
        }
        close OUT;
        print "\"$file_name\" uploaded.<br>\n";
        print "<a href=\"./upload.cgi\">戻る</a>\n";
        print "</body></html>\n";
    }
}