CGI Script


 CGI


 CGI

  CGI(Common Gateway Interface)機能は、NCSA HTTPDなどWeb   サーバが提供する機能の一つです。この機能によって、Webブラウザ   からの入力をWebサーバを通してサーバが処理し、何かを保存したり   読みとったり、Webサーバを通して、情報をWebブラウザに返した   りできます。   フロ−図で示すと、     Webブラウザ (1)→ Webサーバ  (2)→ サーバ               (HTTPD,etc.)    (UNIX,etc)              ←(4)        ←(3)   となります。   プロセスをもう少し具体的に説明しますと、    (1) ブラウザからWebサーバにHTTPのGET,POSTメソッドを発行します。    (2) Webサーバは、サーバにCGIスクリプトを実行させます。    (3) Webサーバは、サーバから実行結果を得ます。    (4) Webサーバはブラウザに結果を返します。   のようになっています。   

 CGIスクリプト

   Webサーバと同じシステム上で実行され、Webサーバからの要求に    応答するプログラムのことです。上のフロー図では、(2)から(3)にかけ    ての動作といえます。    CGIスクリプトはサーバ上で実行されますので、サーバのシステムに    ついても知っておく必要があります。    つまり、CGI機能を使いたいならば、      Webサーバへ送信するためのフォーム(HTMLファイル)、      サーバで動くCGIスクリプトのプログラミング、      サーバのシステム    について知っておく必要があります。

 プログラミング言語とスクリプト言語

    C、C++、Javaなどの「プログラミング言語」は数行の小さなプ    ログラムから数十万行に及ぶ大規模アプリケーションまで、システムプ    ログラムを含めて、あらゆる種類のプログラムが書けます。     これに対してJavaScriptなどの「スクリプト言語」は、コンピュータ    に命令を与えるという意味ではプログラム言語に他なりませんが、コー    ディングの量も比較的少なく、与える命令の種類も多くないという意味    で「スクリプト言語」と呼ばれます。     両者の違いは程度の問題です。

 プログラミング言語


  CGIのプログラムは、Webサーバと同じサーバ上で実行でき、標準入力
  (stdin)と標準出力(stdout)ができれば、言語は問わないといえます。こ
  のようなプログラミング言語としては、C、C++、Perl、シェルがあ
  ります。

  ・CGIスクリプトを書く言語としてはPerlがよく使われます。
    その理由として、
      Perlはコンパイルする必要がない、
      テキスト処理に優れている、
      Cと同じように汎用的で強力、
      セキュリティの面で優れている、
      データベースに対応している、
    という点があります。

   ・MicrosoftではActiveXがあります。



 UNIXサーバを利用する人の場合

 最低限必要な知識   ・CGI機能を利用できるためには、現在でもWebサーバがUNIXシス    テム上で動いているケースが多いので、UNIXの使い方を知ることも必    要です。基本的コマンド、ファイル属性、パス、ディレクトリ構造    については熟知しておく必要があります。   ・サーバでCGIの使用が許可されていること。     まず、CGIが利用可能かどうか管理者に問い合わせることです。     管理者からCGIスクリプトを置くディレクトリをもらう必要があります。   ・スクリプト(Perlで書いたプログラム)では、     漢字コードはEUC、改行コードはLF、であること。   ・ファイルのパーミッションは、8進数の755、であること。   ・Perlのパスが正しく設定されていること。     例えば、 #!/usr/local/bin/perl   ・ファイルを直接指定する場合、URL指定が正しいこと。     例えば、ドメインに続いて、/cgi-bin/mydirectory/test001.cgi   ところで、CGIスクリプトは、使い方によって、Webサーバに過度の  負荷をかける、セキュリティ・ホールの原因になる、など重大な問題を生じ  させます。  特に、EXECコマンドについてセキュリティ上の問題が大きいといえます。   ですから、Webサーバの管理者によっては、    ・CGI機能を使えないように設定する、    ・CGI機能を使えるように設定している場合でも、      初心者には許可しない、        知らずにリスキーなことする        初歩的なことまで質問されかえって面倒      信用のおけるユーザーなどに利用者を限定する、      EXECコマンドを実行禁止にする、   といえます。   つまり、誰にでも自由にUNIXサーバでCGI機能が利用できるとい   う訳ではありません。   安全なCGIスクリプトを書くための留意事項については、    http://hoohoo.ncsa.uiuc.edu/cgi/security.html   を見て下さい。


 Windows95/NTでCGI

  UNIXのサーバを直接利用できないならば、いっそのこと自分のパソコンの
  Windows95/NTでCGIを勉強したいということになります。

  そこで、自分のパソコンでCGIの勉強をするための手順について説明します。。

 必要な準備
 ・Windows95/NT用の Perl ver.5 を入手し、インストールします。
  (Cでもよいのですがコンパイラが必要ですし、動作させるまでがやっかいです。)
   入手方法は、Perlのページを参照して下さい。
   必要な設定をします。

 ・Windows95/NT用のWebサーバを用意します。
   Windows95/NT用のWebサーバを入手します。
    入手方法は、Web Serverのページを参照して下さい。
   インストールし、必要な設定をします。
   ネットワーク上にないマシンであれば、
     サーバ名は、   localhost
     IPアドレスは、 127.0.0.1
    です。サーバをCGIの実験に使うのであれば上の設定でよい
    でしょう。また、defaultでこの設定になっている場合が多い。
   
   自分のパソコン上のブラウザから、自分のパソコン上のWeb
   サーバにアクセスできるようにします。簡単なHTMLドキュメント
   で確認できます。

 CGIを使う
   ・アクセスできれば、次に、CGIスクリプト(Perlで書いたプログラ
    ム)を直接指定してアクセスします。CGIスクリプトが動作すれば
    実験成功です。
   ・次に、HTMLドキュメントからCGI機能を使うようにします。
   ・ここまでできればほぼ完璧です。あとは自由にCGIを使うことがで
    きます。

   自分のパソコンでCGIを勉強するのには、上のような作業が必要です。
  またその際、ブラウザ、Webサーバ、Perlなどの正確な設定やコマンド
  のために、TCP/IP、PATH、ALIAS、ファイルの関連付け、などに関してかな
  りの知識が必要です。CGIスクリプトをC言語で書くのであれば、コン
  パイルして実行ファイルを作る作業が必要です。



 CGIの実際

 富山大学では、セキュリティ確保のため、公式Webサーバの設定では
 CGIの使用が禁止されています。従いまして、CGIは実行できません。
 悪しからずご了承下さい。

 上で述べてあるように、CGIを使いたければ、自分のパソコンに、
 PerlおよびWebサーバをインストールしましょう。

 SSI(Server Side Includes)

 私のWebページでは、以前、アクセスカウンターを設けていました。
 しかし、1998年8月から移った情報処理センターの新しいWebサーバにで
 は、セキュリティの関係から、CGIやSSIが禁止されましたので、カウ
 ンターを外さざるを得ませんでした。

  以前に使っていたカウンターのCGIクリプトファイルは、
  George Burgyan氏作成のものです。
  入手方法:http://www.webtools.org/counter

 (1) WebサーバのSSI(Server Side Includes)機能
  ・HTMLファイルにコマンドを埋め込むことによって、
    ファイルの挿入、ファイル修正日時の表示、
    CGIスクリプトの実行、シェルコマンドの実行
   などを可能にする機能です。
  ・コマンドとしては、config, include, echo, fsize, flastmod,
    exec があります。

  ・SSIの許可/禁止、あるいはコマンドの許可/禁止は
   Webサーバで設定されます。

  ・サーバによってはSSIをサポートしていないものもあります。
   Apache(for Windows),Xitami(for Windows) はSSI対応です。

 (2) コマンドを埋め込むファイルについて
   サーバに対して、サーバによる解析が必要であることを知らせるために、
    ・ファイルを作成し、その中にコマンドを埋め込みます。
    ・そのファイルの拡張子を、通常は、 .shtml とします。
       拡張子の指定はWebサーバで設定されます。
        Apache の場合、.shtml
        Xitami の場合、.shtml, .shtm,  .ssi
 
    例:  test-ssi.shtml

   test-ssi.shtml (CGIスクリプトを指定)
   ------------------------------------------------
    <!-- #exec cgi="/cgi-bin/test-ssi.pl" -->
   ------------------------------------------------

   test-ssi.pl (CGI Script for Apache)
   ------------------------------------------------
    #!/perl/bin/perl

    print  "Content-type: text/plain\n\n";
    print  "CGI Script \n";
    print  "Server Side Includes\n";
    print  "End of test-ssi \n";
    exit(0);
   ------------------------------------------------

 (3) コマンドの実行について
   htmlファイルから、拡張子がshtmlのファイルが、
    <A HREF="test-ssi.shtml" >test-ssi</A>
   のようにして呼び出されたとき、
    Webサーバはshtmlファイルを解析し、コマンドの実行を
   サーバPCに命令します。

 (4) exec コマンドの cmd と cgi
    <!-- #exec cgi="xxxxx.pl" -->
    <!-- #exec cmd="yyyyyy.pl" -->

   cgiとcmdの場合のスクリプトの指定の違いに注意して下さい。
   cgi:実行させるスクリプトはCGIスクリプトであること。
      Perlスクリプトを指定すると、何も表示されない。
   cmd:実行させるのはPerlスクリプト、実行ファイル、であること。
      CGIスクリプトを指定すると、何も表示されない。

 (5) SSIの詳細については、
   NCSA を参照。



 CGIの環境変数



 例えば以下のような環境変数があります。出力例を含めて示しておきます。

 AUTH_TYPE = 
 CONTENT_LENGTH = 
 CONTENT_TYPE =
 GATEWAY_INTERFACE = CGI/1.1
 HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
 HTTP_COOKIE = 
 HTTP_REFERER = http://127.0.0.1/
 HTTP_USER_AGENT = Mozilla/4.03 [en] (Win95;I;Nav)
 PATH_INFO = 
 PATH_TRANSLATED = 
 QUERY_STRING = 
 REMOTE_ADDR = 127.0.0.1
 REMOTE_HOST = 127.0.0.1
 REMOTE_IDENT = 
 REMOTE_USER = 
 REQUEST_METHOD = GET
 SCRIPT_NAME = /cgi-bin/environment.pl
 SERVER_NAME = localhost
 SERVER_PORT = 80
 SERVER_PROTOCOL = HTTP/1.0
 SERVER_SOFTWARE = Xitami web server v2.2d(c)1991-1997 iMatix


 CGIの参考書


  ・ローラ・リメイ著 武舎広幸・久野禎子・久野 靖訳
     『続・HTML入門 −新機能,CGI,Webの進化』
            (プレンティスホール出版,3900円)
    ホームページの作り方のコーナーで推薦しましたが、CGIスクリプトの
    説明についてもかなり紙幅を割いています。
    技術的な側面も詳細に説明してあります。
    有用なライブラリである、cgi-lib.pl, jcode.pl の説明もあります。

  ・秋本・古川著『CGIプログラミング入門』(翔泳社,1997),2800円
    最近出た入門書です。UNIXについての説明もあります。
    CDには有用なパッケージやソフトが収録されています。
    例えば、cgi-lib.pl, jcode.pl, Perl Ver.4.036(for Windows95)です。

  ・Stephen Asbury, et al./アクロバイト監訳
     『CGIパワフルテクニック大全集』インプレス(1997.8).4600円+税
    PerlとCによるプログラムが多数掲載されています。
    CD−ROMも添付されています。



 UNIXの参考書

  参考書として、
   ・中西 隆著『 UNIX活用ハンドブック』(技術評論社,1994),1900円
   ・K.Christian & S.Richter著 久野靖監訳
                『 UNIXワールド』(丸善,1996),5974円
   ・山口和紀監修『The UNIX Super Text 上』(技術評論社,1992),3400円
   ・山口和紀監修『The UNIX Super Text 下』(技術評論社,1992),3700円
  などがあります。上から下へ順に、専門性が高くなっています。


戻る