当サイトで使用しているCGIはすべて自分で作りました。
使用言語はperlとC。複雑な文字列処理はperlに頼らざるを得ないですね。
今更ですがY2K対策済みです。(笑)
トップページにて実行しているSSIです。
カウンタ部分は、数字を++して、総計/前日/当日のカウント数を書き出すだけ。
出力をimgタグに変更すれば即グラフィックカウンタになりますが、
そうしないのに特に理由はありません。:-)
REMOTE_HOST
変数
もしくはREMOTE_ADDR
変数NULL
が返されてしまいます。
その理由は、ホスト名を検索するのはhttpサーバの役目であり、
それによる負荷を嫌うサーバでは検索機能をOFFにしているからです。
(Apacheの現行バージョンでは、
デフォルトで「検索しない」ようにされています)REMOTE_ADDR
変数に用意されているので、
この値を記録することができます。
この変数の値を元にスクリプト自身がホスト名検索を行うことも可能ですが、
ネットワーク機能を利用する命令であるため、
待ち時間による動作速度が低下する可能性があります。また、
SSI/CGIのネットワーク機能利用を許可しないサーバ設定も存在するようです。HTTP_USER_AGENT
変数Mozilla/4.7 [ja] (Win98; I)
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
HTTP_REFERER
変数しかしこれらの情報、ときどき嘘や関係ないデータが紛れ込むので困りもの。 (特に最初のプロバイダでは化けて化けてしょーがなかった‥‥(^^;;)
ところで、グラフィックカウンタというと、imgタグでCGIを呼ぶ、
というのが主流ですが、
中身がどうなっているのかまで知っている人、そんなに多くないのでは。
いろいろ調べた結果、GIFファイルを動的に生成できるC言語ライブラリを発見しました。
(しかし現在、出力形式はPNGにとって変わられています。)
どちらにせよ、
これを用いればCGI型のグラフィックカウンタも簡単に作成できるのですが、
残念ながらCGIでは一部の変数(HTTP_REFERER
など)が採取できないので、
SSIのままで行こうかな、と。
上記のSSIで記録したログを集計します。と口で言うのは簡単なんですけど。
今までのアクセス記録のすべてを集計対象としているので、
記録件数は個人サイトでは類を見ない規模となっているかもしれません。
‥‥意味はともかく。(^^;
さて、このCGIの元となったperlスクリプトは、ある友人からのもらいものでした。
出所はMatt's Script Archiveかネットサーフレスキュー[Web裏技]
あたりのようです。
それからどんどん改造を施しました。スクリプトが原形をとどめなくなってから、
何を思ったかC言語への移植を試みたのが運の尽き。
移植に成功してから随分経ちましたが、
バージョンアップやデバッグは今でも続いています(^^;
と書いたところで、他の誰が得するわけでもないのよね。(;_;)
なお、ドメイン名から実際の組織名を得るには、jpnicやinternicなどの提供するwhoisサービスから、 必要なデータだけを引き出して作成したデータベースを用いています。 しかし、昨今はセキュリティやプライバシーの観点から、 掲載データが必ずしも正しい内容とは限らない模様です。
ルーチン骨子:伝言板はフリーで便利なスクリプトが数多く出回っていたり、
もしくは実行サーバ領域ごとレンタル、というシステムが主流だったりしますが、
やっぱり自作にこだわってみました。
書き込みの際にcookieを発行するのは今や当たり前ですが、
任意の箇所から任意の件数の書き込みを見る機能は
そうそうないんじゃないかな、と思います。使われるかどうかはともかく。(^^;
自前のルーチンで、文字飾りなどの一部のタグが使用可能になりました。
が、完璧なタグの認識・解釈ルーチンにはまだまだ遠いです。
(いっけない、HTML-lintのプログラム、DLしたきりで読んでない‥‥)
現在の仕様として、書き込みの表示フォーマットはランダムで変化します。
どんどんパターンを増やしていきたいな。
ちなみに、基本のフォーマットはKTBBS形式なのですが、
これは単なる趣味。(^^;
(にいなみの初めに入ったネットが、このBBSだったということ。)
こういう趣味を反映できるのが自作のよいところです♪(^^)
さてC言語はどこに使っているかというと、
書き込みデータのファイル出力部分。
ここにsetuidを掛けることによって、
データを攻撃から守っています。(多分。)
スクリプトを書き直した際にフレームなどの一部の機能を廃止したのですが、 ファイルサイズは30%ほど増加しています。可読性ってやつですね。(^^;
これらのCGIが復活することはまずありませんが、 製作で得た知識は別の形で活かしていこうと思います。
時間差チャット(perl)
いわゆる1行掲示板。1997/11/18に稼動開始、1998/08/07を以って廃止。
チャット(perl、C言語混合)
会話ログの表示行数を「未読分+一定数」とすることで、
未読が必ず1回は表示されることを保証した。
呼び出される回数の多い表示部分をC言語で実装。
1998/05/02に稼動開始、1999/12/12を以って廃止。
「おてがみぼしゅう」(perl)
フォーム内容をデコードし、自分のメールアドレスに送信。
1997/10/24に稼動開始、2000/10/14を以って廃止。
ご芳名帳(perl)
にいなみ画報年齢規制部屋への入口として作成。中身は至極単純なログ収集。
記帳は義務ではなく、何らかの「足跡」が欲しかったというのが動機なのだが、
どうやら昨今の風潮ではない模様。
1997/09/18に稼動開始、2002/09/01を以って廃止。