• ベストアンサー

read() on unopened filehandle at…とい

read() on unopened filehandle at…というエラーが出て困っています。 Perlで画像ファイルをアップロードしたものをサーバー内のディレクトリに保存するようなものを作っているのですが、ファイルハンドルが開けなくて困っています。 ソースはほぼほぼ以下の通りです。 http://www.jun2065.net/index.php?Perl%B4%D8%CF%A2%2F%A5%D5%A5%A1%A5%A4%A5%EB%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C9%A5%B5%A5%F3%A5%D7%A5%EB 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

> #ファイルサイズのチェックを行う > 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 のアップファイルの取り扱いについて 詳しくないので、誤っているかも知れません。)

keeeeeeeen
質問者

お礼

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

その他の回答 (2)

回答No.3

アップロードする側のhtmlで <input type="file" name="tUpFile"> という名前にしておく必要がありますが、そこはどうなっていますか?

keeeeeeeen
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

関連するQ&A