• 締切済み

ActivePerl,UTF-8環境のCGIにてブラウザからアップロー

ActivePerl,UTF-8環境のCGIにてブラウザからアップロードしたファイルの保存に失敗する件について、原因と対処方法をお願いいたします。 以下の環境でCGIを作成していましたが、  WindowsXP  ApacheServer  ActivePerl 5.10系 先日HDDがクラッシュしましたので、Windowsの再インストールからはじめて同じ環境を構築し動作確認を行っていたところ、新しい環境ではファイルのアップロードに失敗することが判明しました。 ファイルのバイナリが壊れるようです。画像等バイナリファイルをアップロードすると、ファイルサイズが3割程度増えたものが保存され、壊れます。 今回変わったところと言えば、ActivePerlのバージョンが最新になったくらいです。 調べても原因が判明しなかったことに加え、  クラッシュ前の環境ではこのような問題はなかった  Linuxサーバでは問題ない ので、悩んでいます。 問題部分のソースはこのようになります。 use utf8; # 略 CGIモジュールを使用しています $fh = $q->upload(key); open (OUT, ">$directoryname$filename"); binmode (OUT); while(read($fh, $buffer, 1024)){ print OUT $buffer;} close (OUT); close ($fh); どこも間違っていないと思うのですが、どなたかこの問題を解決できる方はおられるでしょうか。

みんなの回答

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

一時ファイルに格納された段階で、すでにファイルサイズが増加しているように思えます。use utf8; を使わないか、順番を変えたらどうなりますか? use CGI; BEGIN { $q = CGI->new; } use utf8; ...

cafemilk_m
質問者

補足

格納された段階で壊れている可能性が高いと私も思っています。 自作したフレームワーク内でのことですのでuse utf8は削れません。 BIGINはエラーになります。

すると、全ての回答が全文表示されます。
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

ファイルアップロード用の HTML のフォームに ENCTYPE を指定してありますか? <FORM ACTION="/cgi/xxxxx.cgi" METHOD="POST" ENCTYPE="multipart/form-data">

cafemilk_m
質問者

補足

問題ありません。 ENCTYPEは記述しています。

すると、全ての回答が全文表示されます。
回答No.1

これをいれるとどうなりますか binmode $fh;

cafemilk_m
質問者

補足

アドバイスありがとうございます。 変化なしでした。

すると、全ての回答が全文表示されます。

関連するQ&A