
CGIについて
CGIで何ができるか・・・
アクセスカウンター
クリッカブルマップ
フォームの読み取り
HTML文書のプログラムによる作成
プログラムによる映像や音声の生成
メールを発信することも可能
所有するページの変更日時によるインデックスの作成
来訪者のリモート・ホスト名を取得
CGIの行うことは簡単
通常のHTML文書は指定されたファイルがサーバーからそのまま転送するが、
CGIは、プログラムを呼び出して、その出力をブラウザーに転送する。
また、出力とは関係ない処理もできる。
CGIは、ホームページを置いているサイトのサーバー上で実行される。
どうやって呼び出すの?
<A HREF="CGIprogram?param">呼び出し</A>
<IMG SRC="CGIprogram?param">
<FRAME SRC="CGIprogram?param">
などのタグで呼び出す。
この場合、paramが引き数としてシェルの環境変数で受け渡される。
CGIのプログラムは、シェルスクリプト、C言語、Perlなどが一般的だが、
何といってもPerlが最も適しているだろう。画像生成など特殊な重い処理を
行わせるには、C言語が適している。
ただし、出来るだけネットワークやサーバーの負荷を重くしないよう配慮しよう。
Macをサーバーとしているサイトでは、アップル・スクリプトを使用している様だ。
受け取ることができる環境変数
下のリンクは、U−netSURFのサーバーが値を返すものについて、
実際にCGIでテキスト表示する。
Not On Service
WWWサーバーからの情報だけでなく、時間などホストマシンが持つ
環境変数も取得できる。
この表示プログラムのソースは、
http://home.netyou.jp/77/future/cgi-bin/env.cgi
タグと出力
CGIからブラウザーに出力されるデータは、スタンダードアウトから出力する。
このとき、出力の最初に、MIMEヘッダーというものを送る必要がある。
MIMEヘッダーと本文の間には、一つ空行を挿入する必要がある。
IMGタグで呼び出されたCGIは、GIFとJPEGなど画像のみを
返すことが許される。
"Content-type: image/gif\n\n"
"Content-type: image/jpeg\n\n"
など。image以外のものを返しても無視される。
A(アンカー)タグやFRAMEタグからの呼び出しでは、
"Content-type: text/plain\n\n"
"Content-type: text/html\n\n"
"Content-type: image/gif\n\n"
"Content-type: image/jpeg\n\n"
などが指定できる。
1つのタグで出力できるのは1ファイルのみ。
複数のファイルを並列に転送する規格はMIMEで規定されているが
ブラウザーが対応していない様だ。
アクセスカウンタの種類
アクセスカウンタの種類には2種類ある。
プロバイダーが用意しているものの多くは、IMGタグで呼び出すものだ。
これは、プログラムでGIFを合成して転送しているらしい。
もう一つは、FRAMEタグでCGIを呼び出しHTMLを合成して、
既存のGIFを並べて表示する方法。
ホームページにこの方法でアクセスカウンターを作るには、ブラウザーが
フレーム対応でなければならない。しかし、現在ほとんどのブラウザーが
フレーム対応になっているので問題ないだろう。
アクセスカウンターのサンプル
現在、フューチャー・ホームページは、PerlによるGIFイメージ合成で
自作のアクセスカウンターを生成しているが、開設時にはFRAMEタグを使って
実現していた。ここではその方法を紹介する。
1. index.html ~future/index.html
直接呼び出されるホームページのファイル。
このファイルには、ホームページの中身が含まれていない。
基本的には、CGIによるフレームの呼び出しを記述しているだけだ。
引き数で、テンプレートファイル名とカウント値を保持するファイル名を
指定している。
2. template.html ~future/template.html
このファイルには、ホームページの内容の本体が記述されている。
コメントタグ内に<!--counter-->というキーワードを仕込んでおくことで、
その場所にアクセス・カウンタ等を配置するようにプログラムしている。
ただし、このタグと同じ行に書かれた内容は表示されない。
このファイルの改行コードは、プロバイダーのサーバーマシンの
改行コードと合わせておかないと正しく機能しない。
U−netSURFでは、UNIXなので、0x0A。
FTPで転送の際テキストモードで転送すると自動変換される。
3. sample.cgi ~future/cgi-bin/sample.cgi
実際に呼び出されるCGIのプログラム。
perlで書いてあり、動作チェック済み。
このプログラムを使いたい人は、コピーして自分用に修正して使うといい。
4. カウンタのGIFファイル ~future/GIF/*.gif
以下のような各桁のイメージを用意しておく。
ファイル名:L-frame2.gif, atfSP.gif, atf0.gif - atf9.gif, R-frame2.gif

このサンプルを元に、オリジナルのアクセスカウンタ付きホームページが作ろう。
U−netSURFにホームページを持っている人は、
1. オリジナルのカウンタの画像を用意する。
2. ホームページのテンプレートファイルを用意する。
3. index.htmlをこのページを参考に作成する。
4. CGIプログラムをコピーして、ユーザー名や画像ファイル名などを変更する。
という手順で、実現できるはず。
他のプロバイダーの方は、perlが使えることが必要で、CGIやその他ファイルの
パス指定の変更などが必要になる。
ディスクの使用容量を知る
通常、プロバイダーでホームページを置く場合、容量制限(quotas)を超えた時に
初めて警告が出ます。しかし、その前にどれくらい使っているか知りたいものです。
そこで、容量を知るためのスクリプトを作ってみました。
U−netSURFは、サーバーマシンのOSがUNIXなので、以下のスクリプトで
ディスク容量を知ることが出来ます。
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
open(IN,"du -s ..|");
$size=<IN>
close(IN);
chop $size;
$size =~ s/\s.*//;
print "$size blocks\n";
$size *=512;
print "$size bytes\n";
$size /=1024;
print "$size Kbytes\n";
$size /=1024;
print "$size Mbytes\n";
--------
du -s
は、あるディレクトリ以下のブロック(512バイト)数を知るUNIXコマンドです。
この出力結果をパイプを使って入力しています。
フューチャー・ホームページへ戻る
(C)1997 Future on netyou ALL RIGHTS RESERVED.