CGI/Perlの基礎

CGI(Common Gateway Interface)とは、WWW サーバがブラウザの要求を受けてプログラムを実行しブラウザに返答する仕組みをいいます。 CGIの仕組み

【 CGI の特徴 】

  1. 通常のWeb ページでは、HTML のページを閲覧するだけですが、CGI を用いることで、掲示板、アクセスカウンタやアンケート など動的なページを作成できます。つまり情報の流れが双方向に扱うことができます。
  2. CGI はサーバ上で実行されるため、訪問者のコンピュータやブラウザなどに依存しません。従って、管理者側の意図する動作をします。

他に動的なページを作成するものに、JavaScript や Flash などがありますが、これらはプログラムをブラウザ側で実行させるため、 その機能はブラウザ側に依存し、動作や表示機能に制限が出てきます。

CGI の利用方法

CGI を利用するには、主に次のような方法があります。

CGI プログラムを自分で作成して利用する。

CGI プログラム言語には、「Perl」、「C言語」、「PHP」などがあります。自分でCGI プログラムを作るにはこれらのプログラム言語や、 WWW サーバに関する専門的知識が必要になります。筆者は自作できるレベルではないので自作したい方は専門書や他の専門サイトを参考にして下さい。 ここでは CGI としてよく使われる、「Perl」について記述します。

インターネット上に公開されているCGI プログラムを利用する。

Web サイトでCGI プログラムが公開されています。使用条件、無料、有料かを確認して利用できます。比較的簡単にCGI の機能が実現可能です。

適当な CGI を入手したら、このサイトで紹介している HTML エディタ ez-HTML の、CGI/Perl プログラム編集機能を利用して改造したり、ローカルテストで実際に試しながら確認ができます。Perl プログラムを覚える近道かもしれません。

【CGI/Perl 配布サイト】

Kent Web =豊富な種類の CGI/Perl プログラムを配布しているサイトです。 本サイトでも、カウンタ、画像認証フォームメールなど使用させてもらっています。メールや掲示板は IP アドレスを取得して特定アドレスを拒否するスパム対策もできますよ。

プロバイダが提供しているCGI プログラムを利用する。

CGI/Perl はサーバで実行するので、プロバイダ側は慎重になっています。「暴走されたら大変!」だからです。そのためなのかどうか、無料または一部有料で提供しています。 比較的信頼できる CGI の機能が実現できます。

Top↑

Perl とは

Perl(Practical Extraction and Report Language)は、UNIX 上で CGI を実現するための代表的なプログラミング言語です。その特長は、

  • インタープリタ言語なのでプログラムがテキストのままで作成、修正しやすい。
  • 文字列を扱う機能が優れている。
  • 無償で提供されている。(ActivePerlのインストール解説

「インタープリタ言語」とは、コンパイル(コンピュータが解釈できるコード、いわゆる機械語に翻訳すること)する必要がありません。 テキスト形式で記述したものを、即プログラムとして実行できます。正確には自動コンパイルされ、1行ごと解釈しながら実行されています。

CGI の設置方法

契約しているプロバイダやレンタルサーバに、CGI プログラムを設置する際の注意点を記述します。

Perl の設置パスを確認する。

CGI プログラムを実行させるため、Perl のパス(Perlプログラムがある場所)を確認します。ほとんど、「/usr/local/bin/perl」か、「/usr/bin/perl」です。 この両方のパスに対応しているところもあるようです。UNIXでは、ディレクトリー(フォルダ)は「/」で区切ります。

Perl による CGIプログラムは、この設置パスの頭に「#!」を付けて、この設置パスにあるPerl を使ってこの後に続く CGIプログラム を実行することを、次のように最初に定義します。

#!/usr/local/bin/perl

サーバの制限事項を確認する。

CGI の置く場所が決められている場合があります。CGI の設置手順をよく確認しましょう。また、SSI (Server Side Include)、 sendmail などは、セキュリティ面で制限され使用できないことが多いです。前もって確認しておきましょう。

FTPの転送モード

FTP によりファイル転送する場合、2種類の転送モードがあります。「バイナリーモード」と、「アスキーモード」です。 一般的なFTPソフトは、自動的に転送モードを切替えられるのであまり意識しないで済みますが、CGI プログラムは、テキスト形式の ファイルなので「アスキーモード」になります。

【改行コード】
プラットフォーム 改行コード
UNIX / Linux LF
Windows CR + LF
Macintosh CR

インターネットでは、主に UNIX、Linux、Windows、Macintosh などのOS が混在し、「改行コード」がそれぞれ異なります。そのため、転送先のサーバ にアップロードする際にテキスト形式のファイルを転送する場合は、改行コードをUNIX形式に変換し、画像ファイルや音声ファイルなどの バイナリーファイルは、そのまま転送する必要があります。それでFTP 転送モードが2種類存在します。

Top↑

パーミッション

パーミッション(Permission)とは、ファイルやフォルダに与える「アクセス権」のことをいいます。 UNIX サーバは、もともと複数の利用者がアクセスすることを前提にした OS なので、特にパーミッションは厳格に管理しています。

パーミッションの定義

パーミッションは、UNIX サーバの場合、ユーザとしての「自分」、「グループ」、「その他」の3つの分類に対して、実行権限として「読む」 、「書く」、「実行」の権限を3 ビットの8進表記(0〜7)で定義しています。

【パーミッション】
自分 グループ その他
読む read書く write実行 eXecute 読む read書く write実行 eXecute 読む read書く write実行 eXecute
rwx rwx rwx
4 (222 (211 (20 4 (222 (211 (20 4 (222 (211 (20
  • 例 1
    パーミッション「rw- r-- r--」は、自分(読み書き許可 4+2)、グループ(読みだけ許可 4)、 その他(読みだけ許可 4)となるので「644」ということになります。
  • 例 2
    パーミッション「rwx r-x r-x」は、自分(読み書き実行許可 4+2+1)、グループ(読み実行許可 4+1)、 その他(読み実行許可 4+1)となるので「755」ということになります。

【 UNIX のパーミッション表示例 】

UNIX のディレクトリーリスト表示例です。先頭に「d」があるのは、ディレクトリー(Windows のフォルダと同じ)を意味し、「-」は一般ファイルを意味しています。

% ls -l
total 3
-rw-r--r--  1 username 471 Oct 23 2006 filename1
drwxr-xr-x  2 username 512 Sep 22 2006 directory
-rw-r--r--  1 username 759 Jun 10 2006 filename2
%

標準的なパーミッション

一般的なファイルの標準的なパーミッションの例を、下表に示します。

【標準的パーミッション】
ファイル形式 内 容
読み込み専用 .html  .pl HTML、ライブラリー 644  ( rw- r-- r-- )
CGI ファイル   .cgi 実行権限を持つ 755  ( rwx r-x r-x )
データファイル  .dat  .log 書き換え可能 666  ( rw- rw- rw- )

FTPでパーミッション設定変更

FTPパーミッション設定ダイアログ

ファイル転送 FTPソフト(FFFTP使用)で、サーバ側にファイルのアップロードが済んだ後、パーミッション設定変更する場合、該当ファイル を「右クリック」→「属性変更」で、図のダイアログが開き、設定変更できます。

通常は、「ファイル名で転送モード切替」で転送すればパーミッションも標準値に設定して転送されますが必ず確認するようにしましょう。 私の体験から、ファイルをアップロードして最初にトラブルのがパーミッション設定でした。

Top↑

設置に必要なツールとテスト環境

CGI プログラムを作成しテスト環境を設置するには、本サイトで紹介している「高機能HTMLエディタ ez-HTML」をお勧めします。 HTML ファイル、CGIプログラムの作成から自分のコンピュータでCGIプログラムが実行できる WWW サーバ環境を作り、ローカルで 動作チェックができます。

必要なソフトウェア

準備するソフトウェアは、次の3点です。すべてフリーソフトなので無償で入手できます。機能、インストール方法などの詳細は 本サイトの「ez-HTML」紹介ページをご覧下さい。

  • 次世代高機能 HTMLエディタ 「ez-HTML」
  • 「 An HTTPD 」WWW サーバソフトウェア(中田昭雄氏)
  • 「 ActivePerl 」Perl 実行ソフトウェア(ActiveState社)

「ez-HTML」は、内蔵プレビューもできる Web 開発ツールですが、他のテキストエディタ「TeraPad」や、 「Crescent Eve」などでも使えます。使い慣れたものでも良いでしょう。

Top↑