CGIの基礎


どんな時にCGIが必要か

  1. アクセスカウンタを付けたい時。
  2. フォームによるメール送信ページを作りたい時。
  3. 掲示板が欲しい時。
  4. 投票フォームが欲しい時。
  5. 自分のページがどのページからリンクされているか知りたい時。
  6. その他、ユーザーがウェブページにアクセスしたり書き込んだりしたら、だれかにメール送信したり、サーバーに何かデータを蓄える必要がある時。

CGIを使う上で必要な知識

  1. 基礎的なHTMLが書けること。
  2. FTPが使えること。
  3. テキストエディタ(メモ帳や秀丸など)が使えること。
  4. UNIXの基礎を知っていること。ls,cd,chmod,rm,whichなどのコマンドや、ディレクトリに関してなど。DOSはUNIXに似ているので、もしDOSコマンドに慣れているなら、幾つかの違いさえ覚えればあとは簡単。

CGIを使う前に

 注意!! ウェブサーバ(あなたがこれからホームページを置こうとしているサーバ)で、CGIを設置することが許可されていない場合は、CGIプログラムを置けません。また置いても実行できないようになっています。

 しかし最近、CGIが設置可能なプロバイダも多くなっています。もし設置不可能な場合でも、アクセスカウンタ・フォーム送信等基本的なCGIの幾つかがシステム側で用意されていて、ユーザはHTMLにコードを追加するだけでその機能が使えるようになっている場合がほとんどです。

 もしCGIが一切用意されていない場合でも、他のサーバーで無料・あるいは有料でアクセスカウンタや掲示板などを公開している場合があるので、そこに登録すればHTMLにコードを追加するだけでその機能を使うことができます。

 CGIとはプロバイダのサーバ上で動くプログラムです。そのプログラムを使ってサーバ上にデータを書き込むこともできれば、消去することもできます。ですから、プログラムの書き方次第ではサーバをダウンさせたり、悪質な侵入者にセキュリティーホールを提供したりする恐れがあるので注意しましょう。(CGI不許可のプロバイダがあるのはこのためである)

 アクセスカウンタ・掲示板・フォーム送信など基本的なものは、自分でプログラムを書かなくても、フリーソフトとして幾つか出回っていますから探してみましょう。


インストール前の下準備

  1. perlプログラムのあるパスを調べておきます。すでにわかっている場合は以下の操作は必要ありませんが、わからない場合は以下の方法で確認できます。
    1. telnetでUNIXのシェルに入ります。Windows95の場合、URLウィンドウに、telnet:プロバイダのサーバ名 と打ち込みます。
      例えばここSTBBS.NETの場合、 telnet:www.stbbs.net です。
    2. ログインIDとパスワードを打ち込むと、% のプロンプトが表示されます。MS-DOSのコマンドプロンプトに似たようなものです。
    3. which perl と打ってリターンキーを押しましょう。するとperlプログラムのパスが表示されます。これをメモしておきましょう。例えばSTBBS.NETの場合、/usr/local/bin/perl と表示されます。
    4. logout と打ってリターンキーを押してください。UNIXシェルを終了するときは、(ハングした時など特殊な時を除いて)必ずログアウトコマンドで終了させるのがマナーです。
  2. プロバイダによっては、.htaccessというファイルを用意しておかないとCGIが使えないことがあります。例えばここSTBBS.NETもそうです(必要かそうでないかは、プロバイダに問い合わせれば答えてくれると思います)。その場合、以下の内容を書いたテキストファイルを、.htaccess というファイル名で保存し、public_htmlディレクトリにFTPでアップロードします。これは、CGIプログラムの環境設定のようなものだと思ってください。
  3. Options ExecCGI Includes
    AddType application/x-httpd-cgi .cgi
    AddHandler server-parsed .html
    AddHandler server-parsed .htm
    
    注意! 必ずテキストモードでアップしてください。バイナリモードでアップすると、CGIプログラムをインストールしても実行できません。
  4. なお、プロバイダによってはCGIを置くディレクトリが決まっている場合がありますが、その場合はそのディレクトリにプログラムを置きます。決まってない場合はCGIプログラムを置くディレクトリを作ってそこに置くと良いでしょう。私の場合はcgiというフォルダを作ってそこに置いています。

補足(1999-07-26)

AddType text/x-server-parsed-html .html
AddType text/x-server-parsed-html .htm

と.htaccsssファイルに指定すると.html、.htmファイル中に指定したSSIスクリプトを実行できると以前説明しましたが、ウェブサーバの最新バージョンではうまくいかないことがあります。その場合、上に説明した通り、AddHandlerで指定すればうまくいくようです。


出来合いのCGIプログラムをインストールするには

  1. CGIプログラムをダウンロードします。例えば、Web裏技等、いろいろ便利なプログラムがあるので探してみましょう。
     なお必要ファイルが一つだけでなく複数のこともあります。ちゃんと説明を読んで全部ダウンロードしましょう。また拡張子が.zipのファイルで配布されている場合は、WinZipなどの「アーカイバ」を使えば元ファイルを復元できます。
  2. 大抵は、説明書を読みながらCGIプログラムを自分の環境に合わせて書き換える必要があります。メモ帳や秀丸などのエディタで編集します。
     書き換える箇所は説明書に書かれているはずですが、例えば冒頭の#!/usr/local/bin/perlなどと書かれている部分は、さっき調べておいたperlプログラムのパスに書き換えます。例えばSTBBSの場合、
    #!/usr/bin/perl
    に書き換えておく必要があります。またその行の前に空行が入っている場合は消しましょう。
     その他にも設定項目が必要な場合があります。プログラムによって異なりますが、そのCGI自身のURL、メールアドレス、などです。
  3. 「サイズ0のファイル」を用意する必要のある場合
     Windows95では、フォルダを右クリックし[新規作成]-[テキスト文書]を選ぶと、サイズ0のファイルができます。 いったん作成したら、あとは適当なファイル名に変更したり、コピーしたりして使いましょう。
  4. CGIプログラムをFTPで転送する
     この際、CGIプログラムは必ずテキストモードで転送してください。バイナリモードでは正常に動きません。
  5. パーミッション(属性)を設定する
     パーミッションとは、実行や読み込み・書き込みの「許可」のことです。 もし第三者がどのファイルでも自由に書き込みできたりプログラムを実行できたりしたら、悪意ある侵入者が荒らす危険があります。一方、掲示板などのプログラムは、第三者が他人(つまりプログラムを設置したあなた)のプログラムを実行したり、他人のファイルに書き込みしなければなりません。そのため、どのファイルは実行して構わないのか、どのファイルなら書き込んで構わないのかを、こちらでちゃんと設定して許可するようになっています。これがパーミッションです。
     FTPによってはパーミッションの変更に対応しているものもありますので、もし使えるならそれが簡単です。例えばFFFTPの場合、変更したいファイルを右クリックして属性を変更できます。
  6. 実際にプログラムを実行してみる
    エラーが出ずにきちんと実行できればOKです。

CGIスクリプトを自作する時の注意

 CGIスクリプトは、自作することもできます。しかし、プロバイダのウェブサーバ上でプログラムのデバッグをするのはやめましょう。もしバグがあったためにウェブサーバが止まってしまっては大変です。

 ローカル環境でウェブサーバを動かし、そこでデバッグすれば問題ありません。例えばWindows用には以下のソフトがあります。

 ただし、Windows用のウェブサーバソフトは、ファイルシステムやパスワードによる認証等、細かい部分で動作が異なることがあります。本格的にデバッグを行うには、使い古しのマシンで構わないのでもう一台用意して、LinuxのようなUNIX系OSをインストールし、テスト用ウェブサーバとして使うことをおすすめします。これならプロバイダの本当のウェブサーバとほぼ同じ環境で試験できますし、UNIX系OSの勉強にもなって一石二鳥です。

 Linuxには色々なディストリビューションがありますが、とりあえずローカル環境で使えれば良いのであれば、RedHat Linuxか同じ系統のものがインストールが比較的楽で、使っている人も多いです。パソコンショップでパッケージソフトとして購入する以外にも、パソコン雑誌や書籍の付録CD-ROMとしてより安価に入手することもできます。ちなみに私がCGIのテスト用に現在使っているのは、珍し物好きが高じて中国製の「紅旗Linux」ですが、これもRedHat系です。


戻る