電子書籍の厳選無料作品が豊富!

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);

どこも間違っていないと思うのですが、どなたかこの問題を解決できる方はおられるでしょうか。

A 回答 (3件)

一時ファイルに格納された段階で、すでにファイルサイズが増加しているように思えます。

use utf8; を使わないか、順番を変えたらどうなりますか?

use CGI;
BEGIN { $q = CGI->new; }
use utf8;
...

この回答への補足

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

補足日時:2010/10/12 11:32
    • good
    • 0

ファイルアップロード用の HTML のフォームに ENCTYPE を指定してありますか?



<FORM ACTION="/cgi/xxxxx.cgi" METHOD="POST" ENCTYPE="multipart/form-data">

この回答への補足

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

補足日時:2010/10/11 21:45
    • good
    • 0

これをいれるとどうなりますか


binmode $fh;

この回答への補足

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

補足日時:2010/10/11 11:35
    • good
    • 0

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