これまで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で質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
POST送信
-
CGI経由でのPDFファイルをダウ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
このメールフォームが機能しな...
-
[HTML]プルダウンメニューの横...
-
FORMのselectの選択肢を最初か...
-
tracert ができない原因
-
チェックボックスの返す値
-
WEBページを強制的に横画面で見...
-
拡張子'html'と'htm'はどっちが...
-
VB初心者。小数点以下の表示で...
-
INPUT TYPE
-
チェックボックスとセレクトボ...
-
ボタンの処理
-
VB.net データーグリッドビュー...
-
ブックマークからのアクセスを...
-
select値をhiddenのvalueに渡し...
-
チェックボックスで選択した内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアップロードができ...
-
CGI経由でのPDFファイルをダウ...
-
選択式アンケート項目合計点で...
-
2つのドメイン、同じサーバー。...
-
普通のHTMLの画面からCG...
-
<FORM TYPE="subumit">でデータ...
-
perlで重複データを集計
-
クッキーを使って投票欄に名前...
-
cgi+htmlテンプレート使用
-
ひとつのCGIファイルに複数のペ...
-
クオートの多重入れ子をするには?
-
perl/cgi リダイレクトができない
-
CGI掲示板のSendmail送信について
-
htmlからパラメータで、cgiに渡...
-
cgiでのprint関数
-
ホームページビルダーで作ったh...
-
伝言掲示板の作成(超初心者です)
-
フォントサイズを変えるには?
-
DBの更新について困っています
-
パスワード認証のCGI
おすすめ情報