
これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。
一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。
POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。
IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。
どなたか問題点あるいはどこをチェックすれば良いかご指摘いただけませんでしょうか。
●やった事
PerlにてPOSTを利用しmultipart/form-dataにてファイルをアップロードするシンプルなコードを書き、第一段階としてMIMEエンコードされたものをブラウザ上に表示するしようとしてみた。
コードは最下方の通り。
●症状
送信を実行してもアップロード中のまま(ウィンドウマークが動き続けている)で、IISに設定してある10分程のタイムアウト時間を過ぎて終了してしまう。
TXT、XLS、DOCなどファイル種を変えて試しても全く同じ症状。
●環境:Windows2000ServerSP4 IIS5.0 Perl5.8.8
*******アップロード画面******
<HTML>
<HEAD>
<TITILE>ファイルのアップロード</TITLE>
</HEAD>
<BODY>
<FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>
</BODY>
</HTML>
**********ここまで***********
*******CGI*******************
#!/perl/bin/perl
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>test</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$buffer";
print "</BODY>\n";
print "</HTML>\n";
exit;
********ここまで***********************
No.1ベストアンサー
- 回答日時:
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
を
undef($/); $buffer = <>;
に直してみると、どうでしょうか?
うろ覚えの記憶ですが、 IIS は
Content-Encoding: chunked
で返すので、CONTENT_LENGTH はあてにならなかったと思います。
デコードは、マルチパートも含めて自分でやると面倒なので、 CGI.pm とかがお勧めです。
結論から言うと、お勧めいただいたcgi.pmを使う事にしました。
ただ、なぜうまく行かないか腑に落ちなかった事が、「IISのCONTENT_LENGTH はあてにならなかったと思います。」という一言により判りスッキリしました。ありがとうございます!!
つまりは、送られてくるデータ量より大きい数字がCONTENT_LENGTHに入っているため、その分のデータが送られてくるまで待機状態になっていたという事だったんですね。試しにCONTENT_LENGTH部分を変数ではなく受け取るであろうデータ量よりも小さめの数字にしてみたところ、予想通り、受け取りデータの途中までをブラウザ上に表示できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIでテキストボックスの内容に...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
select値をhiddenのvalueに渡し...
-
ラジオボタンが両方とも選択で...
-
横スクロールを縦スクロールに...
-
[HTML]プルダウンメニューの横...
-
別formのhidden項目を自form値...
-
perlを難読化、暗号化させたい
-
WEBページを強制的に横画面で見...
-
チェックボックスの返す値
-
proftpdで困ってます。
-
オイラー法の誤差
-
tracert ができない原因
-
左右のフレームを同時にスクロ...
-
vsftpd+sslでアップロードできない
-
「value」に2つの値をセットす...
-
python subprocessに関する質問
-
拡張子'html'と'htm'はどっちが...
-
チェックボックスとセレクトボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
掲示板(kentさんの所のsunbbs...
-
ダブルクオテーションは使うべ...
-
Perlでメール送信機能
-
htmlからパラメータで、cgiに渡...
-
CGIがうまく作動せず困っていま...
-
ezwebにおける POSTメソッドで...
-
CGIでテキストボックスの内容に...
-
希望した番号に更新マークを表...
-
cgi+htmlテンプレート使用
-
テキストファイルを読んで次のc...
-
レンタルサーバーでperlのcgiフ...
-
PC・携帯等のアクセス時の自動...
-
sendmailで送信すると、迷惑メ...
-
sendmail 送信先を複数設定す...
-
substrで数値を抽出してのマッ...
-
Spreadsheet::WriteExcelについ...
-
CGIから表生成(1行に数件のデ...
-
サーバー上のPDFにCGIでパスワ...
-
【perl/cgi】文字列を検索して...
-
CSVを読み込んでメニューを作成...
おすすめ情報