4D v12.4

CGIを使用する

ホーム

 
4D v12.4
CGIを使用する

 

CGIを使用する  


 

 

4D Webサーバでは、CGI (Common Gateway Interface) がサポートされます。WebサーバとCGIとの関係は、4Dメソッドとプラグインの関係に似ています。CGIはWebサーバから呼び出され、タスクを実行して応答、つまり完全なWebページまたはサーバより送信されたページに挿入されたHTMLコードを返します。CGIは訪問カウンタの表示、ゲストブックの作成、フォームメールの受信等を行うため、頻繁に使用されます。現在では数多くのCGIが利用可能であり、その大半はフリーウェアです。

Note: 本来、CGIは外部アプリケーションとHTTPサーバがやり取りを行うための規約でした。今ではCGIという用語は、外部アプリケーションそのものに対して使用されています。

Mac OS XおよびWindowsにおいて、4DはあらゆるタイプのCGIをサポートします。CGIは、アプリケーションやPERLスクリプトであったり、またはWebサーバとの対話を行うDLLの場合もあります。

  • 実行形式 (.EXE): "コンソール (標準入出力) "と環境変数を使用します。通常、ソースコードはクロスプラットフォームです (WindowsおよびUnix) 。CGI名は一般的に、nnn.exeまたはnph-nnn.exeとなります。
    この種類のCGIに関する詳細は、インターネットサイトhttp://httpd.apache.org/docs/2.1/howto/cgi.htmlを参照してください。
  • DLL ISAPI: IIS (Internet Information Server) 用のエクステンションです。CGI名はnnn.dll またはnph-nnn.dllとなります。Webサーバが処理実行のため中断されると、DLLがダウンロードされます。
    この種類のCGIに関する詳細は、インターネットサイトhttp://www.microsoft.com/iis/を参照してください。
  • PERL スクリプト: "コンソール"と環境変数を使用します。CGIの実行にはインタプリタが必要です。しかし、これらはクロスプラットフォームです (Windows、UnixおよびMac OS) 。CGI名はnnnn.pl、nph-nnnn.pl、nnnn.cgiまたはnph-nnnn.cgiとなります。
    この種類のCGIに関する詳細は、インターネットサイトhttp://www.perl.com/を参照してください。

自動モードでのCGIの呼び出しは、CGIによって実行されるタスクに応じて、ページに挿入されたURLやアクション、またはHTMLタグを介して行われます。いかなる場合でも、HTML文字列には/cgi-bin/に続けてCGI名、あるいはHTML構文を使用したパスと検索文字列を含む必要があります。

例えば、"http://195.1.2.3/cgi-bin/search.exe"というURLにより、search.exeというCGIが起動されます。同様に、<IMG SRC="/special/cgi-bin/counter.exe">というマーカーがHTMLページに置かれている場合、このページが送信されるとcounter.exeというCGIが起動されます。

CGIは、cgi-binという名前のフォルダのルートに配置する必要があります。このフォルダは、Webサーバのルート、またはサブフォルダに置きます。サーバには複数のcgi-binフォルダを保持しておくことができます。また、このフォルダには実行形式のアプリケーション以外のファイルを入れておくことができますが、最新のものだけがWebクライアントから呼び出せます。

CGI"Count.exe"を使用したインストールの例:

いくつかの例、または場所と対応するURLを以下に示します:

項目の場所対応するURL(Webサーバルート)
[mybase] folder
+ mybase.4db (ストラクチャ)(http://195.1.2.3/)
[cgi-bin] folder
+ counter.exe(http://195.1.2.3/cgi-bin/counter.exe)
[Misc] folder
+ [cgi-bin] folder
++script.pl(http://195.1.2.3/Misc/cgi-bin/script.pl)

手動モードでのCGIの呼び出しには、SET CGI EXECUTABLEコマンドを使用する必要があります。特に、このコマンドを使用すると、Webユーザに対してURL上に表示されないようにCGIを実行することができます。
この件に関する詳細は、このコマンドの説明を参照してください。

CGIの呼び出しによって、4D環境が変更されることはありません (セレクション、変数等) 。
4Dは応答サイズの制限を行いませんが、CGIに割り当てられる最大処理時間には30 秒という制限がある点に注意してください。この時間を超えると、Webサーバはエラーを返します。

CGIの呼び出しによりエラーが発生すると、4Dは以下の応答のいずれか1つを標準のHTMLページに納めて返します:

  • Not found (見つからない) :4DはCGIを見つけられません、またはPERLインタプリタが見つかりません。
  • Forbidden (禁止) :Webクライアントは、[cgi-bin]フォルダ内の実行形式ファイル以外のものを要求しています。
  • Timeout (タイムアウト) :リクエストは、CGIにより30 秒以内に処理されませんでした。
  • Bad Answer (不当な応答) :4DはCGIの応答を処理できません、またはISAPI DLLが例外処理を引き起こしました。
  • Internal Error (内部エラー) :メモリーフルなど

Note: CGIが動作しない場合は、CGIに関する実行権が適切であるか、またCGIスクリプトの改行が正しいかどうかを調べてください。

この節は、4Dデータベース用に特定のCGIを開発しようとするプログラマを主に対象としています。

環境変数

4DはCGI/1.1仕様、および以下の情報に従って環境変数の定義を行います:

GATEWAY_INTERFACE: 常に“CGI/1.1”

SERVER_SOFTWARE: 常に“4D_v11_SQL/version”

SERVER_PROTOCOL: “HTTP/1.0”または“HTTP/1.1”

SERVER_PORT_SECURE: HTTP接続が暗号化モードである場合には"1"が、それ以外は"0"が納められます。

PATH_TRANSLATED: HTMLサーバルートへのフルパス、およびCGI名に続けてパス部分が納められます。セキュリティ上の理由から、この部分には文字シーケンス"//"や".."を入れることはできません。
例 : サーバのルートが“C:/web”であるとき、/cgi-bin/cgi.exe/pathのようなCGI呼び出しに対し、PATH_TRANSLATEDの値は"C:/web/path"になります。/cgi-bin/cgi.exe/../パスのようなCGI呼び出しに対して、4Dは"Forbidden"エラーを返します。

REMOTE_IDENT: ユーザ名 (適切であれば) 、それ以外は未定義。

HTTP_AUTHORIZATION, HTTP_CONTENT_LENGTH そして HTTP_CONTENT_TYPE: 未定義

ALL_HTTP およびURLは、ISAPI DLL呼び出しの場合に定義されます。

CERT_xxxHTTPS_xxx は、接続が保護されている場合に定義されます (DLLのみ) 。

Note: SET ENVIRONMENT VARIABLE コマンドを使用して、これらの変数を設定することができます。

標準の環境変数に加え、4Dではテキスト変数のFORMVAR_variablenameが提供されます:

  • リクエストが"POST"メソッドで送信された場合、バイナリフィールド (INPUT TYPE="FILE") を除き、これらの変数にはフォームの入力エリア ( 例えばFORMVAR_NAMEFORMVAR_FIRSTNAME等) が代入されます。このシステムは、"www/url-encoded"および"multipart/form-data"でエンコードされたフォームとともに使用できます。
  • リクエストが"GET"メソッドで送信された場合、これらの変数にはリクエストの文字列に渡された値が代入されます (例えば.../cgi.exe?name=smith&code=75というURLの場合、FORMVAR_NAMEには"smith"という値が、FORMVAR_CODEには"75"という値が入ります) 。

この機能により、フォームの処理はさらに楽になりますが ("a=1&b=2&..."のような文字列を解析する必要がない) 、このCGIは4D特定のものになります。

CGIより送信された応答の処理

CGI (Windows実行形式またはPERLスクリプト) の名前が"nph-" (No Parsing Header) で始まる場合、4Dはその応答を"現状のまま"Webクライアントに送信します。この場合、HTTPの規約に準拠するかどうかはCGI次第です。ISAPI DLLに関しては、4Dは名前の先頭が何であろうと、その応答を解析しません。

上記以外の場合、4DはHTTPヘッダを送信します:

  • "Content-Type"がCGIにより指定されていない場合、4Dは常に"Content-Type:text/html"を送信します。
  • "Location"が指定されている場合、4Dはこの応答の他の要素を考慮せずに、HTTPのリダイレクションを実行します。
  • "Status"が指定されていない場合、4Dは"HTTP/1.0 200 OK"を送信します。

4Dは、HTTP応答のヘッダ内にある、あらゆる種類の改行コンビネーション (Windows-CRLF、Mac OS-CR、Unix-LF) を受け付け、再フォーマットします。

ISAPI DLLに関して4Dは非同期処理 (HttpExtensionProcHSE_STATUS_PENDINGを返す) を受け付けます。ServerSupportFunction (HSE_REQ_DONE_WITH_SESSION) の呼び出しは、必ず次の30秒の間に行われなければなりません。関数TerminateExtensionが定義されると、常にHSE_TERM_MUST_UNLOADの値を使って呼び出され
ます。

 
プロパティ 

プロダクト: 4D
テーマ: Webサーバ

 
参照 

SET CGI EXECUTABLE
SET ENVIRONMENT VARIABLE