2

私の質問はcgiについてです。Perl スクリプトを .cgi ファイルとして保存したかどうか疑問に思いました。サーバーに、それが Perl スクリプトであり、他のものではないことを知らせる実際のメカニズムは何ですか? ソース ファイルの先頭にがあることは知ってい #!/usr/local/bin/perlますが、これも Perl プログラミング言語の一部であるため、サーバーは実行を開始する前にそれが Perl スクリプトであることを認識している必要があります。

4

2 に答える 2

3

HTTP サーバーは通常、指定されたファイルをクライアントに送信するだけです。サーバーの構成によって、代わりにどのファイルが実行され、その出力が返されるかが決まります。

たとえば、一般的なApache httpdサーバーの構成ファイルは です。httpd.conf具体的には、Includeそこから d されたファイルの 1 つです。ソフトウェアのバージョン、ホスト オペレーティング システム、ディストリビューションによって大きく異なります。

基準は、ファイルがファイル構造内のどこにあるか、またはその名前に基づいています。

次のようなScriptAliasディレクティブ

ScriptAlias /cgi-bin

ディレクトリ内のすべてのファイルが/cgi-binCGIスクリプトとして扱われることを示しています。

または、次のようなAddHandlerディレクティブ

AddHandler cgi-script .cgi

拡張子を持つすべてのファイルは、.cgiどこにいても CGI スクリプトとして実行されます。

于 2012-07-29T20:57:59.847 に答える
1

サーバーが接尾辞を認識するように構成されている場合.cgi、おそらくexec*()関数のいずれかを使用して、ファイルを実行するだけです。

Unix ライクなシステムでは、ファイルが で始まるテキスト ファイルの場合#!、システム カーネル自体がその行を使用して、ファイルをスクリプトとして実行するために起動するインタープリターを決定します。

CGI スクリプトは、任意のインタープリター言語 (Perl、Python、bash、sh、ruby など) で作成できます。

さらに言えば、任意の実行可能ファイルを CGIスクリプトプログラムとして使用できます。たとえば、C、C++、または Ada プログラムをコンパイルして実行可能ファイルを作成.cgiし、ファイル名に接尾辞を付けて適切なディレクトリにインストールすると、Web サーバーはそれを直接実行できます。スクリプト言語はこの種の作業に便利な傾向があるため、一般的には行われませんが、Web サーバーは、呼び出す実行可能ファイルの種類や、カーネルがそれを呼び出す方法を気にしません。

(詳細は、Windows では少し異なる可能性が高く、通常はファイル拡張子を使用して実行可能ファイルの起動方法を決定します。)

于 2012-07-29T22:35:03.737 に答える