プロが教える店舗&オフィスのセキュリティ対策術

read() on unopened filehandle at…というエラーが出て困っています。
Perlで画像ファイルをアップロードしたものをサーバー内のディレクトリに保存するようなものを作っているのですが、ファイルハンドルが開けなくて困っています。

ソースはほぼほぼ以下の通りです。
http://www.jun2065.net/index.php?Perl%B4%D8%CF%A …


宜しくお願いいたします。

A 回答 (3件)

エラーメッセージの意味は理解できますか?

    • good
    • 0

> #ファイルサイズのチェックを行う


> while($bytesread = read($filename, $buffer, $BUFSZ)){
> $file .= $buffer;
>
> $file_size ++;
> if($file_size > 300){
> exitError("ファイルサイズが大きすぎます。600KB 以下にして下さい。");
> }
> }

...,..

> # ファイルを指定ディレクトリにコピー
> open(OUT, ">$uppath/$upfile") or die "Can't open $uppath/$upfile";
> binmode OUT;
> while (read($filename, $buffer, 1024)) { # Read from $fh insted of $file
> print OUT $buffer;
> }

> #FILEHANDLEのファイルをバイナリモードで扱うようにします。
> #バイナリファイルとテキストファイルを区別しないOSでは何もしません。
> binmode(OUT);
> print(OUT $file);
> close(OUT);

リンクを見てみましたが、2重に読み込んで2重に書き込むようになっているようです。
「ファイルを指定ディレクトリにコピー」の個所の while ループは、特に必要がないの
でコメントアウトしてはどうでしょうか。(CGI.pm のアップファイルの取り扱いについて
詳しくないので、誤っているかも知れません。)
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
問題はcgiで$cgi->upload()したものをハンドルして使っていないということだと分かりました。

ありがとうございます。

お礼日時:2010/06/03 12:26

アップロードする側のhtmlで


<input type="file" name="tUpFile">
という名前にしておく必要がありますが、そこはどうなっていますか?
    • good
    • 0
この回答へのお礼

nameとtypeとあとformの設定もきちんと行われています。
while文ではちゃんとデータが入ったのでハンドル部分の問題でほぼほぼそこも解決しました。
ありがとうございました。

お礼日時:2010/06/03 12:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!