1

Apache、IIS 6、およびIIS 7で機能するヘッダーを取得しようとしています。その理由については、ここでは説明しません。思ったほど簡単ではないとだけ言っておきましょう:-)

とにかく、問題はNPHと関係があります。私たちのコード(元々はIIS 6用に書かれていました)には、

use CGI qw(:standard);

print "HTTP/1.0 200 OK\n";

print header;

すべてのcgiスクリプトの上部にあります。これが、NPHが必要であることをIISに伝える方法であると読みました。

Apacheはファイル名を使用して出力がnph(nph-はファイル名の先頭である必要があります)であるかどうかを確認するため、私が行ったこと(IIS 6とApacheの両方で機能します)は次のとおりです。

use CGI qw(:standard);
print header('text/html', '200 OK');

興味深いことに、IIS 7はNPHを必要としているようです。したがって、どちらも必要としない場合

use CGI qw(:standard -nph);

また

print "HTTP/1.0 200 OK\n";

print header('text/html', '200 OK'); #parameters are apparently optional 

ブラウザはmimetypeを取得しないため、ファイルに対して何か奇妙なことをしようとします。

また、IIS 6および7はヘッダーをまったく印刷しなくても問題ありませんが、Apacheはそれを好みません。

とにかく、今のところ一番いいのは作ることです

use CGI qw(:standard);
print header('text/html', '200 OK');

どういうわけかIIS7で動作します。誰かが私がそれを行う方法を知っていますか?サーバー構成の詳細はすべてわかりませんが、必要な詳細を取得する方法を教えていただければ、それを行うことができます。

どちらにせよありがとう!

4

2 に答える 2

1

サーバーに応じて正しいことを行うサブルーチンを作成するだけです。それぞれの場合に何をしなければならないかはわかっているので、その場合はそれを実行してください。

もう 1 つのオプションは、CGI.pm にパッチを適用して、サーバーの種類を調べて $CGI::NPH 変数を正しく設定することです。CGI.pm にはすでに基本が含まれています。それを修正したら、パッチを提出してください。

幸運を :)

于 2008-12-02T02:31:21.603 に答える
0

Brian (および他の人) は、正しいことを実行するサブルーチンを作成するように私に言いました。これが他の誰かに役立つことを願っています!

sub header {
    return (($ENV{PERLXS})?"HTTP/1.0 200 OK\r\n":"").CGI->header(@_);
}
于 2008-12-02T03:11:35.783 に答える