プロが教える店舗&オフィスのセキュリティ対策術

 Active Perl を Microsoft-IIS/5.0 on Windows 2000 Server SP4 の環境にインストールして使用しています。以前は、手動で導入した Active Perl を使用していたのですが、先月 5.8.8 をダウンロードしてインストールしました。

 うまく動いたと思ったのですが、cgi が実行され出力されたページよく見てみると、出力内容にかならず 「Content-type: text/html」 などの文字が先頭に含まれてしまいます(たとえば、ウェブページの左上など)。困った事に、cgi によって合成出力される GIF 画像のバイナリデータにもこの文字列が含まれてしまうため、GIF 画像として認識されずに表示できなくなってしまいました。

 ここ1ヶ月ほど調べたりして設定を見直してみたのですが、どうやっても直す方法がわかりませんでした。以前の古い Perl (バージョンは失念してしまいました…) の時はこのような事はなかったです。ただし、新しいアプリケーションが古い Active Perl では動かなかったので、ロールバックする事はできません。

 cgi に対する 「アプリケーションの構成」 の 「アプリケーションのマッピング」 は 「~perlのパス\perlis.dll」が記載されていて、動詞は 「GET,HEAD,POST」が設定されています。その下のチェックボックス二つにもチェックは入っています。

 どなたかご存知でしたら、お力をお貸しいただければと思います。

A 回答 (2件)

試しにアプリケーションのマッピングを


perlのパス\perlis.dll から
perlのパス\perl.exe %s %s
 (perl.exe半角スペース%s半角スペース%s <=sは必ず小文字で)
に変えてから、IISを再起動したらどうなりますか?
http://www.din.or.jp/~bigstone/cgilab/cgitips/ii …

検索してみたら
perlis.dllでは動くが perl.exe %s %sでは500errorになる
と言う記事を見つけました。
ひょっとしたら、その場合はスクリプトにヘッダー出力を記述していないことが原因かもしれません
だとすると、、、
・perlis.dll=>ヘッダーは不要
・perl.exe %s %s =>ヘッダーが必要
と言うことになり、おっしゃっているような現象になることが推測されますが?
    • good
    • 0
この回答へのお礼

 ありがとうございます。遅くなりました。海外出張で没頭していました。
 試してみたところ、ご指摘のとおりエラーになってしまいます。スクリプトそのものは、単一のものではなく、違う作者さんの違うものを使用しており、また、以前は問題なく動いていた事から、スクリプトそのものにバグのようなコーディングミスがあるわけではないと思います。そのスクリプトを使ったサンプルサイトや他のサイトでは問題なく動いているようですし…。

お礼日時:2007/02/12 23:11

IISの問題で無ければですが、


MIMEtypeヘッダよりも前に空行を出力しているとそうなりますけど?
ありがちな例としてはヒアドキュメントで
print << "HT_ML";

Content-type: text/html
中略
HT_ML
こんな記述をしているとContent-type: text/htmlの前に空行を出力していますので
そこでヘッダが終了とみなされ Content-type: text/htmlは本文と解釈されます
    • good
    • 0
この回答へのお礼

 ありがとうございます。
 どこで質問していいかわからず、Perl 関連ということでこちらで質問させていただいたのですが、プログラム関連の場所なので間違っていたかもしれません。
 今回私の動かしているのはすべてダウンロードしてきたフリーソフトのような CGI プログラムたちです。同じ作者さんなら、記述上の問題かもしれませんが、複数の作者さんの作品で同じ現象になってしまっています。また、Perl をバージョンアップする前はこの問題はおこっていませんでした。
 Perl のプログラム本体が自作ではないのと、以前は問題ないこと、また他のサイトで同じものを使っている人が、同様の現象が起きていない事から、Active Perl のインストールや IIS の設定で何かがあるのかと思い質問をさせていただいたしだいです。
 何かありましたら教えていただければと思います。よろしくお願いいたします。

お礼日時:2007/01/07 09:34

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