前の章で、CGI プログラムの一般的な説明を完了しました。 ここでは、前回の内容のまとめとして、簡単なデモプログラムを紹介します。
このプログラムを使用するには、OmniHTTPD の最新ベータ版、Windows 95/NT 用の OmniHTTPD 2.0b1 (ベータ 1) が必要です。 お持ちでない場合は、ここ (oh20b1.zip) からダウンロードできます。
OmniHTTPDのインストール方法は第1回と同様ですので割愛します。 ここでは、このバージョンのいくつかの設定の問題について説明します。
[OmniHTTPD プロパティ設定] ダイアログ ボックスを開き、[Web サーバーのグローバル設定] ボタンを使用して、[外部] ページに移動し、.cgi 設定を削除します。 削除しない場合、拡張子が cgi の CGI プログラムは Perl プログラムとして処理されます。当コースでは、Perl 言語での CGI プログラムの拡張子は .pl であり、コンパイルされた CGI プログラムの拡張子は .cgi です。このように設定を変更する必要があります。
このバージョンの OmniHTTPD では、以前のバージョンに比べて SSI (Server Side Include) コマンドのサポートが大幅に強化され、include や exec などのコマンドがサポートされています。 デモ プログラムでは、次のコマンドを使用しました。
(ex8.zip) をダウンロードすると、index.shtml、makelog.cpp、makelog.exe の 3 つのファイルが含まれます。 Index.shtml は SSI コマンドを含むスクリプトです。c:httpdhtdocs ディレクトリにコピーしてください。makelog.exe は CGI プログラムです。makelog.cpp は makelog のソース ファイルです。 exe, if コンパイルを変更したい場合は、VC などの 32 ビット コンパイラを使用する必要があります。それ以外の場合は使用できません。
さらに、OmniHTTPD の設定を変更する必要があります。[サーバー] ページで [デフォルトの仮想設定] を選択し、[デフォルトのインデックス] を [index.shtml] に変更します。 このようにして、ブラウザに http://localhost と入力すると、OmniHTTPD は自動的に Index.shtml をロードします。
別の WEB ドキュメントを作成し、ファイル名index.html で c:httpdhtdocs ディレクトリに保存します。 ブラウザを使用して localhost にアクセスすると、index.shtml は最初に makelog.exe を呼び出してユーザーのアクセス情報を保存し、次に、index.html を呼び出してブラウザに表示します。 ユーザーのアクセス情報は、c:httpdcgi-bin ディレクトリの userlog ファイルに保存されます。
この例では、CGI 仕様の基本的な環境変数と SSI テクノロジーを使用しています。よく読んでください。
4. データベース
CGI アプリケーションの中でも、CGI プログラムの強力な機能を最もよく反映しているのがデータベース アプリケーションです。 インターネット上には数多くのデータベースが存在しており、それらのデータベースのWEBアプリケーションの需要も(企業・ユーザーを問わず)高まっています。 WEB自体が巨大なデータベースとも言えますが、これらの膨大なデータをどのように効率的に整理してWEB上に公開するかは、CGIとデータベースシステムが共同して解決する課題です。
CGI とデータベース アプリケーションを分類する場合、さまざまな観点からさまざまな分類方法があります。 たとえば、データベースのサイズに応じて、CGI の処理内容に応じて、テキスト データベース、ローカル データベース (Microsoft Access など)、データベース サーバー (MS SQL Server、Informix など) に分けることができます。フロントエンド データベース CGI プログラム (ユーザーが WEB ブラウザを使用する対話型 CGI プログラム) とバックエンド データベース CGI プログラム (データベースと対話する CGI プログラム) などに分けることができます。 データベースのサイズの選択は、通常、完了したいタスクのデータ量とコストによって決まります。CGI プログラムをプログラミングするときにフロントエンドとバックエンドを分離するか結合するかは、通常、データ処理の複雑さによって決まります。
通常、データ セットが数メガバイト以内で、データ レコード間に複雑な関係がない場合は、テキスト ファイルを使用してデータベースを構築することを選択できます。これによりコストを最小限に抑えることができ、テキスト ファイルには次のような特徴があります。データベース 管理システム (DBMS、つまりデータベース管理システム) にはない利点: データにエラーが発生した場合、テキスト ファイルを任意のテキスト エディタに転送して回復でき、データベース システムでエラーが発生した場合は、データベースの専門家でない限り、そうしないと修復が困難になります。
データ コレクションが非常に大きい場合、またはデータ レコード間に複雑な関係がある場合は、データベース システムを使用するのが最善です。 テキスト ファイルを使用して数十メガバイトのデータベースを実装すると、高度な RISC サーバーを圧倒してしまいます。 CGI プログラムを使用してデータ間の複雑な関係を処理すると、必然的に CGI プログラムの複雑さが増大し、多くのサーバー リソースが占有されます。その一方で、データベース システムの機能を使用することで、CGI プログラムの設計の難しさを簡素化できます。開発効率を向上させます。
データベース システムを選択するときは、次の点から選択する必要があります。 1. オペレーティング システム プラットフォーム: 最も使い慣れているデータベース システムを選択する必要があります。また、最も使い慣れているオペレーティング システム プラットフォームも選択する必要があります。そうすれば間違いを避けることができます。 2. 価格: 作業を完了できるさまざまなデータベース システムの中から最も安いものを選択する必要があります。ここでは、UNIX または Linux プラットフォームで実行する必要がある無料のデータベース システムについて説明します。 Windows プラットフォーム用の無料のデータベース システムがあります。ご存知の方がいらっしゃいましたら、教えてください。今後のコースで説明します。
Delphi を使用して CGI プログラムを開発するコースです。Delphi は Interbase Server データベース システムを提供します。そのため、ここでは主にデータベース システムを使用した CGI プログラムの開発について説明します。 同時に、データベースシステムによりコーディング工数が大幅に軽減されるため、フロントエンドCGIとバックエンドCGIを統合し、ユーザー入力処理とデータベース操作を1つのCGIプログラムで完結させることにしました。 ただし、他のシステム プラットフォームでは、この方法は使用できない場合があります。読者は、前述の説明に基づいて独自の判断を下す必要があります。
ここでは、いくつかの異なる CGI と、OmniHTTPD での使用におけるそれらの違いについて説明したいと思います。
標準 CGI: 標準 CGI は /cgi-bin/ で設定されたディレクトリに配置する必要があり、OmniHTTPD の実行中にいつでも変更できます。
Win CGI: Windows システムに適用される CGI は、/cgi-win/ で設定されたディレクトリに配置する必要があります。 この CGI は、環境変数や標準入力を使用するのではなく、INI ファイルを使用してクライアント ブラウザからリクエストを取得します。 通常、この種の CGI は使用しません。
ISAPI:Microsoft社が提案したダイナミックリンクライブラリを使用したCGI仕様。
NSAPI: Netscape によって提案されたダイナミック リンク ライブラリを使用した CGI 仕様。
これらの CGI 仕様にはそれぞれ独自の特徴があります。標準 CGI は実行可能プログラムまたは Perl などのスクリプト言語を使用して作成できますが、効率が悪く、各 CGI リクエストには CGI プログラムのインスタンスが必要になります。サーバー内で実行されています。 Win CGI は Stardand CGI と同じ機能を備えています。 ISAPI と NSAPI は非常に効率的でメモリに常駐し、CGI リクエストがどれほど多くても、サーバー内で実行されるインスタンスは 1 つだけですが、この種の CGI は簡単ではありません。デバッグするには、Web サーバー上にある必要があるため、ソフトウェアを閉じている場合にのみ更新を利用できます。
次回の講義では、ホワイトページのデモプログラムを行います。ホワイト ページは電子メール アドレスのリストであり、ユーザーが WEB ブラウザを介してこのリストを照会、編集、追加、削除できるようにすることができます。 この講義では、私が説明したデモプログラムはクエリ操作のみであり、他の操作については後続の講座で説明します。
このデモ プログラムは、Borland Interbase Server データベースに基づいて構築され、Delphi で開発されています。 開発時には、デバッグが容易な標準 CGI を選択しました。
私たちのプログラムは Stardand CGI を使用して書かれており、簡単にデバッグできます。 デバッグが成功したら、たった 1 つのステートメントで Delphi の ISAPI/NSAPI に簡単に変更できます (どうですか、Delphi は非常に優れています!)。