Self-Timer/Information/

CGI技術情報 CGI-techinfo

当サイトで使用しているCGIはすべて自分で作りました。 使用言語はperlとC。複雑な文字列処理はperlに頼らざるを得ないですね。
今更ですがY2K対策済みです。(笑)


  1. アクセスカウンタ 兼 ログ収集(C言語)

    トップページにて実行しているSSIです。
    カウンタ部分は、数字を++して、総計/前日/当日のカウント数を書き出すだけ。 出力をimgタグに変更すれば即グラフィックカウンタになりますが、 そうしないのに特に理由はありません。:-)

    ログ部分で記録している項目一覧:

    しかしこれらの情報、ときどき嘘や関係ないデータが紛れ込むので困りもの。 (特に最初のプロバイダでは化けて化けてしょーがなかった‥‥(^^;;)

    ところで、グラフィックカウンタというと、imgタグでCGIを呼ぶ、 というのが主流ですが、 中身がどうなっているのかまで知っている人、そんなに多くないのでは。
    いろいろ調べた結果、GIFファイルを動的に生成できるC言語ライブラリを発見しました。 (しかし現在、出力形式はPNGにとって変わられています。)
    どちらにせよ、 これを用いればCGI型のグラフィックカウンタも簡単に作成できるのですが、 残念ながらCGIでは一部の変数(HTTP_REFERERなど)が採取できないので、 SSIのままで行こうかな、と。

  2. アクセス解析(C言語)

    上記のSSIで記録したログを集計します。と口で言うのは簡単なんですけど。
    今までのアクセス記録のすべてを集計対象としているので、 記録件数は個人サイトでは類を見ない規模となっているかもしれません。 ‥‥意味はともかく。(^^;

    さて、このCGIの元となったperlスクリプトは、ある友人からのもらいものでした。 出所はMatt's Script Archiveネットサーフレスキュー[Web裏技] あたりのようです。
    それからどんどん改造を施しました。スクリプトが原形をとどめなくなってから、 何を思ったかC言語への移植を試みたのが運の尽き。 移植に成功してから随分経ちましたが、 バージョンアップやデバッグは今でも続いています(^^;

    主な特徴

    と書いたところで、他の誰が得するわけでもないのよね。(;_;)

    なお、ドメイン名から実際の組織名を得るには、jpnicinternicなどの提供するwhoisサービスから、 必要なデータだけを引き出して作成したデータベースを用いています。 しかし、昨今はセキュリティやプライバシーの観点から、 掲載データが必ずしも正しい内容とは限らない模様です。

    ルーチン骨子:
    1. 事前集計済みのデータをロード
    2. ログファイルを解析し、データに加算
    3. 必要な項目をソート
    4. 表示

  3. 伝言板(perl、C言語混合)

    伝言板はフリーで便利なスクリプトが数多く出回っていたり、 もしくは実行サーバ領域ごとレンタル、というシステムが主流だったりしますが、 やっぱり自作にこだわってみました。
    書き込みの際にcookieを発行するのは今や当たり前ですが、 任意の箇所から任意の件数の書き込みを見る機能は そうそうないんじゃないかな、と思います。使われるかどうかはともかく。(^^;

    自前のルーチンで、文字飾りなどの一部のタグが使用可能になりました。 が、完璧なタグの認識・解釈ルーチンにはまだまだ遠いです。
    (いっけない、HTML-lintのプログラム、DLしたきりで読んでない‥‥)

    現在の仕様として、書き込みの表示フォーマットはランダムで変化します。 どんどんパターンを増やしていきたいな。
    ちなみに、基本のフォーマットはKTBBS形式なのですが、 これは単なる趣味。(^^; (にいなみの初めに入ったネットが、このBBSだったということ。) こういう趣味を反映できるのが自作のよいところです♪(^^)

    さてC言語はどこに使っているかというと、 書き込みデータのファイル出力部分。
    ここにsetuidを掛けることによって、 データを攻撃から守っています。(多分。)

    スクリプトを書き直した際にフレームなどの一部の機能を廃止したのですが、 ファイルサイズは30%ほど増加しています。可読性ってやつですね。(^^;

  4. 過去のCGI

    これらのCGIが復活することはまずありませんが、 製作で得た知識は別の形で活かしていこうと思います。


/Information/Self-Timer
maintained by Yug Ninami