具体的なCGIを作る場合のヒント

戻る

CGIを使って何をやるか、その場合に何に注意すべきか。網羅しようと思ったら星の数ほどならべなきゃならないけど、もしも、筆者と同じ様なことを企んでいるのなら、ちょっとしたヒントを書いておきましょか。


カウンター
CGIと言えばカウンターなんて思い込んでいる人もいるかもしれないね。実は筆者はカウンターは作ったことが無いのではっきりしたことは言えない。多分こうだろうな、ということを書いておく。一般的にカウンターはGIFグラフィックを使うよね。だから <IMG SRC> タグのURLでCGIを指定して、CGIからは「Content-type: image/gif」としてバイナリーデータを戻してやることになる。データはバイナリーなので、「Content-Length」もちゃんと戻してやって方が良いだろうな。面倒なのは、GIFグラフィックの合成だ。0〜9の文字GIFを用意して、これらをくっつけることになるわけだが、アニメーションGIFのデータフォーマットを使えば比較的簡単であるらしい。フリーウェアのカウンターや、フリーのカウンターサービスがあるから、自作する人は趣味の人だろうし、頑張って挑戦していただきたい。
掲示板
CGIと言えば掲示板。これもフリーウェアやフリーサービスが沢山あるね。フリー版の表示方法が気に入らなければ作ることになるかな。注意事項は、POSTさせた場合の文字コードの扱いだろう。JISやEUCを自動判別してSJISに変換することが必要だ。最近のブラウザは表示している記入用ページの文字コードでPOSTしてくるらしいけれど。さて、書き込まれた文章の扱い方はどうするか。書き込みが行われたら、リスト表示用のHTMLファイルを作成し、CGIからは御礼メッセージだけを出すか、リダイレクトするという方法もある。これなら、閲覧だけの場合にいちいちCGIを動かさなくて済む。筆者の場合は、ヘッダ用のテキストファイルと、フッタ用のテキストファイルを準備し、CGIでコメント用テキストファイルと合成して返すようにしている。この場合は、コメント毎にひとつのテキストファイルとするか、ひとつのテキストファイルにコメントを追記していくかは、メリットデメリットよく考えた方が良い。
タグ付の文章の場合の処理もよく考えよう。タグ禁止であれば、特殊記号の処理のみで良いが、タグを容認するのなら、「閉じ忘れ」を含めて対応してやらなきゃならない。ちょっと面倒かも。もちろん、タグは容認するものだけを決めておき、他はすべて無効にする。
ログ解析
ログの解析も、フリーウェアを使えばできるが、自作ならぐっとカスタマイズしたものにできる。筆者の場合、クエリーなしでCGIを叩いた場合はログファイルの日時部分のリストを返し、クエリーに日時が入っている場合はその日時のログファイルを解析して結果を表示するようにしている。1日分のログファイルならば、VBでアクセスしても時間が掛かり過ぎると言うことは無かろう。アクセスされたファイルを拡張子でソートするようにしているだけのものだ。ログファイル中でクエリーにある文字列を含む行を示すようなCGIなら、便利なものになるかもしれない。
メール発信
自動的にメールを発信するCGIはどう作るか。メール発信機能をSMTPをサポートしている外部プログラムに任せる方法と、CGI自身でSMTPサーバへメールを送り出す方法がある。SMTPサーバに直接送出する場合でも、プロトコルに慣れればそれほど難しくはない(と思う)。サーバへ直接メールを渡す場合は、当然、サーバ管理者に確認が必要。黙っていても、何かあったときにはログでばれるだろうし。忘れてはいけないのは、メールを発信する目的のCGIであっても、必ず何らかのHTMLテキストを返すことだ。そうしないとクライアント側はタイムアウトエラーになり、正しく実行されたことを確認する術が無い。文字コードに関しては、メールの場合はJISになるのでこれも注意。
ファイルリスト
NT上でISS+VBな人にとっては最も使い手があるかも。ディレクトリ中に放り込んであるファイルをリストアップし、ダウンロードさせるためのページを表示するCGIだ。これは「どういう付加機能を盛り込むか」というアイデアさえあれば、さほど難しくない。筆者の場合は、同じ名前で拡張子が「.txt」になっているファイルを探し、ファイル内容の説明としてページに反映させるようにしている。HTMLファイルのリストなら、かくファイルにアクセスし、タイトル(<TITLE>〜</TITLE>)を表示させると良いかもしれない。こうしたテキストの表示においては、特殊文字をちゃんと変換する必要がある。