アクセスカウンタ npc.cgi マニュアル

あなたは、1996年3月20日以来 ??? 人目のお客様です。


・ 最新版(Ver.0.83)tar+gzipzip版 (Win32用EXEを含む)を ダウンロードする
・ コンパイル済みの バイナリファイルを ダウンロードする
・ オンライン読み用 Separated 版

ここは WWWアクセスカウンタ npc.cgi のオフラインマニュアルペーヂです。 npc.cgiへのバグレポート、質問、要望等は 「うぇぶ会議室」の 「npc.cgiの部屋2」で 受け付けています。

目次

  1. はじめに
  2. 特徴
  3. インストール
    1. Unix環境でのインストール
    2. Windows32環境でのインストール
    3. インストール時の留意点
  4. 使用法
    1. 簡単な使い方
      1. 直接<IMG>画像として呼び出す
      2. 他のCGIからプログラムとして呼び出す
    2. オプションと制御タグ
      1. オプション
      2. 制御タグ
      3. タグ索引
      4. 設定ファイル
  5. トラブルシューティング
    1. エラーメッセーヂ
    2. FAQ
  6. 付録
    1. 著作権
    2. 免責
    3. 作成履歴
    4. これからの予定
  7. 索引

1. はじめに

npc.cgiはアクセスカウンタです。

アクセスカウンタのCGIはたくさん種類があるので、 いまさら何を? と思うかもしれませんが、 見てる前で「ジジジジジ...」と (音は出ませんが) カウンタが進んで行くものは、 あまり見たことが無いのではないでしょうか?

あたしはそう言うのが欲しかったのですが、 見つからなかったので、結局、自分で作ってしまいました。 (^^;;


2. 特徴

npc.cgiは、主に以下の様な特徴を持ちます。


3. インストール

プログラムの最新版は 「ソフトウェア広場」から ダウンロード出来ます。

プログラムはソースプログラムのみの tar+gzip版、および、 Win32 (WinNT、Win95) 用の実行ファイルを含む zip版で供給しています。 tar+gzip版とzip版との違いは 実行ファイルの有無だけで、 ソースは Unix、Win32 とも共通です。

3.1 Unix環境でのインストール

コンパイルにはANSI-Cの処理系が必要ですが、 gccが使えるプラットホームなら 難なくコンパイルできると思います。 ソースプログラムは、src と言うサブディレクトリにあります。

最初に、Makefileの先頭にある コンパイラ設定 (CC)、 設定ファイルを置くディレクトリ名 (INDEX_DIR)、 設定ファイル名 (INDEX_FILE)を カスタマイズして下さい。

最初はそれぞれ、

CC      = gcc
CFLAGS  = -O

INDEX_DIR  = /usr/local/etc/httpd/index
INDEX_FILE = npc.idx

になっています。 特に変える必要が無ければこのままで結構です。

次に、

make

を行なって下さい。

コンパイルが正常に済んだら、出来たnpc.cgiを CGI-scriptが実行できるディレクトリにコピーして下さい。

3.2 Windows32環境でのインストール

WindowsNTあるいはWindows95の環境ではコンパイル作業が必要無いよう、 zip版のアーカイヴに Visual Cを用いて 省略時の設定でコンパイルした実行ファイルが、 npc.exeと言う名前で入っていますので お使い下さい。

ただし、省略時の設定から変えたい時は再コンパイルが必要です。 ソースファイルは、srcと言うサブディレクトリに入っています。

Win32用には、Makefile.w32と言う メイクファイルを入れてあります。 まず、メイクファイルの先頭にある、 設定ファイルを置くディレクトリ名(INDEX_DIR)、 設定ファイル名(INDEX_FILE)を カスタマイズして下さい。

最初はそれぞれ、

INDEX_DIR  = "c:\\httpd\\index"
INDEX_FILE = "npc.idx"

になっています。

次に、

nmake /f Makefile.w32

をするか、あるいは、Makefile.w32を外部メイクファイルとして プロジェクトビルドを行なって下さい。 省略時の値でビルドした時のメイクファイルを npc.makとして 入れてありますので、参考にして下さい。

コンパイルが正常に済んだら、出来たnpc.exeを CGI-scriptが実行できるディレクトリにコピーして下さい。

3.3 インストール時の留意点

実行するサーヴァによっては、Progressive mode を有効に機能させるために サーヴァによる介入を排除するモードで 動かす必要があります。 この場合、サーヴァによっては CGI-script の名前に制限がある場合があります。

例えばNCSA-httpdを使っているのであれば、 頭にnph-を付けて、 nph-npc.cgiなどと言う名前でコピーして下さい。


4. 使用法

4.1 簡単な使い方

npc.cgiはいくつかの方法で呼び出すことが出来ます。

  1. 直接<IMG>画像として呼び出す
  2. 他のCGIからプログラムとして呼び出す

用途に応じて使い分けて下さい。

4.1.1 直接<IMG>画像として呼び出す

直接<IMG SRC="...">と記述される画像として 呼び出す場合、基本的には、

<IMG SRC="/cgi-bin/npc.cgi?L=YourPageLocation">

とします。"/cgi-bin/npc.cgi"の部分は、 もちろんお使いのサーヴァ上でのnpc.cgiのパスにして下さい。 オプションは"?"に続けてURL-encodingで書いて下さい。 "L="以下はカウンタに与える、他と重複しない名前です。 通常はカウンタを利用しているペーヂのパスを書くと良いでしょう。

定義ファイルを利用してカウンタの動作を決定する場合は、

<IMG SRC="/cgi-bin/npc.cgi?L=Location&I=Index">

として、"I="以下に定義ファイルのパスを記述して下さい。

その他、オプションについての解説は、 オプションの項目を参照して下さい。

4.1.2 他のCGIからプログラムとして呼び出す

他の CGI から呼び出す場合、オプションは環境変数 QUERY_STRINGコマンドへの引数、 あるいは、入力行として与える事が出来ます。 環境変数 REQUEST_METHODの値によって、 どのオプションが有効になるか決定されます。 環境変数 REQUEST_METHODが、

使われます。 使い易い方法で呼び出して下さい。

例えば、age.cgiを以下の様に定義して、

#!/usr/local/bin/perl
$home = "/MyHomeDirectory";
$path = "$home/$ENV{'QUERY_STRING'}";
$mdate = int(-M $path);
delete $ENV{'REQUEST_METHOD'};
exec("$home/cgi-bin/npc.cgi", "N=$mdate&W=2&I=readonly.idx");

次の行の様に呼び出すと、

このペーヂは<IMG SRC="/%7Enir/cgi-bin/age.cgi?npc/usage.html" ALT="??">日前に更新されました

このペーヂは??日前に 更新されました、などと表示することも出来ます。

ゲスト利用について

Biglobe User's WWWからは、此処のカウンタがGuest利用できます。

meshnet.or.jpからbiglobe.ne.jpへの 移行に伴って、Guest利用の方法が変わりました。 今までGuest利用をしていた方は、必ず「うぇぶ会議室」での 「biglobe.ne.jp移行への対応について」と 言う記事を参照して下さい。

Biglobe User's WWW 1号機 (www2.biglobe.ne.jp)に ID がある方は、 例えば、あなたのペーヂ"/YourName/YourPage.html"に カウンタを付けたい場合、

<IMG SRC="http://www2.biglobe.ne.jp/%7Enir/cgi-bin/nph-npc.cgi?L=/YourName/YourPage.html&I=www2.idx">

としてアクセスして下さい。 その他のオプションも必要に応じて加えて下さい。

Biglobe User's WWW 2号機 (www2a.biglobe.ne.jp)に ID がある方は、 www2.idxの部分をwww2a.idxに、 Biglobe User's WWW 3号機 (www2b.biglobe.ne.jp)に ID がある方は、 www2b.idxと言う様に、以下、 www2?.idx?の部分を お使いのサーヴァに合わせて下さい。

高ちゃんさんが、 MeshNetユーザ用の移植マニュアルを 書いて下さいました。 1号機のサーヴァ負荷を上げないため、1号機以外のユーザの方は、 Guest利用に慣れたら、是非自分の所に移植することを考慮して下さい。 お願いします。

4.2 オプションと制御タグ

npc.cgiの動作を制御するパラメータには、 主に表示機能の制御を行なうための オプション設定ファイル中で それらのオプション指定を取捨選択するための 制御タグとがあります。 使用出来る全てのオプション/タグは タグ一覧にリストしてあります。

IndexオプションHelpオプション以外の オプションはCGIやコマンドに対する引数としても 設定ファイル中でのタグとしても使用できますが、 制御タグ設定ファイル中のみで使用可能です。

パラメータの評価順は 基本的には (設定ファイル → 引数) です。 複数回同じパラメータが設定されると後から設定された値が有効になります。 つまり、設定ファイル中での設定を引数で変更することが可能です。 ただし、RESTRICTionタグを用いて、 引数での変更を禁止することも可能です。 またModeオプションのみは 引数が最初に評価されます。

オプション文字列は省略記法が使えます。 オプション文字列のうち小文字で記述してある部分は省略可能です。 また、大文字/小文字の区別はありません。 つまり、Helpオプションなら、

HELP
help
h

など何れの記述でも認識されます。

4.2.1 オプション

オプションでは主に設定ファイルの指定とカウンタ自体の動作を制御します。 その他にも動作試験などに使用するオプションがあります。

  1. 設定ファイル名指定 (Index)
  2. カウンタエントリ指定 (Location)
  3. アニメーション機構制御 (Progress, Animation, Delay)
  4. カウンタ値制御 (INCrement, INITial, Number, RANdom)
  5. カウンタの見かけ制御 (DIgits, Color, Transparent, Width, Unit, Offset)
  6. 動作モード選択 (Mode)
  7. その他のオプション (Help, ENVironment, DEBUG)

以下にそれぞれのオプションの詳細機能を解説します。

4.2.1.1 設定ファイル名指定

Index -- 設定ファイル名指定

設定ファイル名を指定します。 省略時は "npc.idx" です。 ファイル名が "/" で始まっているときは、 絶対パスでの指定になります。それ以外の時には、 コンパイル時に決まる設定ファイルディレクトリからの相対パスとなります。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?I=www2.idx&L=test&P=OFF">
[test counts]

設定ファイルはIndexオプションではなく、 CGIプログラムへのパス変数の形で与えることも出来ます。 この場合パスは設定ファイルディレクトリからの相対パスではなく、 サーヴァ側の解釈に従います。

例えば、NCSA-httpd を使っている場合、

<IMG SRC="/%7Enir/cgi-bin/npc.cgi/%7Enir/npc/counter.idx?L=... >

とした場合、ユーザnirのホームペーヂの下の "npc/counter.idx"が 設定ファイルとして使われます。

ユーザの設定ファイルを使う時には、 サーヴァプログラムが読み書き出来る様に 設定ファイルのパーミッションを変更するのを忘れないで下さい。

当然、Indexオプションは 設定ファイル中では使えません。

4.2.1.2 カウンタエントリ指定

Location -- カウンタエントリ指定

カウンタに登録するアクセス元のエントリ名です。 通常はカウンタを利用しているペーヂの位置を書きます。 単に文字列比較でアクセス元を決めているため、 特にペーヂの位置である必要は無いですが、 公開カウンタ等を使う場合など、 他との重複を避けるためにペーヂをURL記法で書くのが良いでしょう。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?L=http://www2.meshnet.or.jp/%7Enir/npc/options.html">

NumberオプションRANdomオプションで 表示する数が決定出来る場合を除き、 Locationオプションは (引数か設定ファイル中で) 明示的に指定することが必要です。

4.2.1.3 アニメーション機構制御

Progress -- アニメーション機能の有効化

カウンタが実際に回転している様にアニメーションさせます。 省略時はOFFです。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?N=123&P=ON">

アニメーションモードには 2種類あり Animationオプションで 選択できます。

アニメーションモードにServer Pushモードを選択した場合、 アニメーションは "Content-type: multipart/x-mixed-replace"の GIFファイルを出力することによって行なっていますので、 Server Pushが理解できないブラウザでは表示できません。 BROWSERオプションで ブラウザの種類を調べて Server Pushを理解出来るブラウザの時だけONに切り替える様にして下さい。

アニメーションにGIF Animationモードを選択した場合は、 アニメーションが表示できないブラウザでもエラーにはなりませんが、 その場合、最初のフレームが表示されたままになるので、 本来よりひとつ少ないカウント値で 表示されることになります。

Animation -- アニメーションモードの選択

Progressオプションで カウンタを動かす時に使用するアニメーションモードを選択します。 現在選択できるモードは 2 つあります。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?L=anime&I=www2.idx&A=G&P=ON&D=1000,10">
[anime counts]

省略時はGIF89aのアニメーションモードが選択されます。 (Ver.0.82以降変更になりました)

Delay -- アニメーション動作速度設定

ProgressオプションがONに なっている時に意味を持つ、数字のアニメーション速度を設定します。

アニメーションの速度は、連続的に変わる数字画像間の描画間隔を伸ばすことで 遅くなります。Delayオプションでは各画像間の時間間隔を ms単位で指定出来ます。省略時は 0ms です。

Animationモード"S" (server push)の場合には サーヴァからブラウザに伝送する間隔を変えることによって、 "G" (GIFアニメ)の場合には ブラウザが画像を描画する時間間隔を指定することによって、 動作速度を制御しています。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?N=123&P=ON&D=1000,10">

最初の数が1枚目から2枚目までの時間遅れ、 2番目の数が2枚目以降の時間遅れです。 2番目の数は省略出来ます。その場合、 1枚目から2枚目までの時間遅れが 2枚目以降の時間遅れにも適用されます。

4.2.1.4 カウンタ値制御

INCrement -- 動作方向選択

カウンタの動く向きを、-1、0、1、のいずれかで指定します。 省略時は1です。 -1 が指定されている時に、 カウンタが 0 に戻ってしまうとそれ以上は戻りません。 (負にはなりません)

Incrementが0だとカウントアップしないため、 Progressオプションは 無効になります。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?L=test&INC=0">

INITial -- 初期値設定

新たにカウンタを登録する時に設定するカウントの初期値です。 省略時は 1 です。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?L=RenewalPage&INIT=12345">

既に登録されているカウンタに INITialオプションを設定しても無視されます。

Number -- 表示カウンタ値の明示的指定

カウンタを任意の数で表示することが出来ます。 Progressオプションを 併用すれば、 カウントアップ(ダウン)してその数になった様に見えます。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?N=999&INC=-1&P=ON&A=G">
[00999]

RANdom -- ランダム数表示

ランダムな数を表示します。省略時はOFFです。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?RAN=ON&P=OFF">
[random counts]

4.2.1.5 カウンタの見かけ制御

DIgits -- 内蔵数字フォント選択

内蔵数字フォント0〜3の選択をします。 省略時はフォント0が使われます。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DI=0&N=123456789&W=10&P=OFF">
[123456789] (16ドット×16ドット)

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DI=1&N=123456789&W=10&P=OFF">
[123456789] (14ドット×14ドット)

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DI=2&N=123456789&W=10&P=OFF">
[123456789] (14ドット×14ドット)

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DI=3&N=123456789&W=10&P=OFF">
[123456789] (14ドット×14ドット)

上の例で括弧内の数は数字一文字の大きさです。

Color -- 色設定

数字の前景色背景色を設定します。 設定された 2色の間で連続した階調を作り、 数字の文字の部分を前景色、 地の部分を背景色として、 輝度の変化に応じて色を割り付けます。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?C=FFDD77,660000&N=12345&P=OFF">
[12345]

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?C=007733,AAFFAA&DI=2&N=89012&P=OFF">
[89012]

色はRGB値を6桁(RRGGBB)の16進数で表わします。 最初の数は前景色を、2番目の数は背景色を表わします。 背景色が省略されると白(FFFFFF)が使われます。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?C=0033FF&DI=3&N=98765&P=OFF">
[98765]

Transparent -- 透明色設定

透明色を設定します。 透明色はRGB値で設定するのではなく、 数字画像のカラーマップ番号(カラーパレット番号)で 設定する事に注意して下さい。 なお、内蔵数字の前景色はすべて7番、背景色はすべて0番になっています。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?T=0&C=008800,F8F8F0&DI=2&N=34567&P=OFF">
[34567]

上の例のように、あらかじめ ペーヂの背景に数字の背景色を合わせる事によって、 綺麗に数字の輪郭を溶け込ませることが出来ます。

Width -- 表示桁数指定

表示する桁数を指定します。 省略時は5桁になります。 最大で10桁(231)まで表示できます。 (例はUnitオプション参照)

Unit -- 表示領域の高さ設定

数字の表示領域の高さをドット単位で設定します。 省略時は1つの数字の大きさとなります。 Offsetオプションと併せて、 表示範囲の調整が出来ます。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?N=123&P=OFF&O=-6&U=28&W=3">
[123]

Offset -- 表示領域オフセット設定

表示領域のオフセット値をドット単位で指定します。 省略時は0です。

数字の表示開始位置を下にずらすにはオフセット値を正に取り、 上にずらすには負に取ります。 Unitオプションと 併せて使用することにより表示範囲の調整が出来ます。 (例はUnitオプション参照)

4.2.1.6 動作モード選択

Mode -- 動作モード選択

カウンタの動作モードを選択します。省略時は 0 です。

Modeオプションで選択した動作モードは、 設定ファイル中で 制御文の条件分岐に使用できます。 これにより、あらかじめ設定しておいた複数の動作モードのうち 特定のものを選択して実行することが出来ます。 具体例は設定ファイルの項を参照して下さい。

4.2.1.7 その他のオプション

Help -- ヘルプ表示

カウンタのヴァージョンと、 そのヴァージョンで使用可能なオプション(タグ名)の一覧を表示します。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?H">
[npc.cgi version: tags]

設定ファイル中では使えません。

ENVironment -- 環境変数表示

オプションのパラメータに環境変数名が指定されると、 環境変数名とその内容を表示します。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?ENV=HTTP_USER_AGENT">
[HTTP_USER_AGENT=user agent name]

パラメータを省略すると、 現在設定されているすべての環境変数を表示します。
(現在、画像は無圧縮モードで出力されサイズが大きいため、 あらかじめ出力した物を再圧縮して張り付けていますので、 この出力例は、現在設定されている環境変数の値とは違います)

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?ENV">
[environments]

設定ファイル中で全ての環境変数を表示するモードを使いたい場合は、 明示的にパラメータとして ""(空白文字列) を 与える必要があります。

DEBUG -- デバッグコマンド

デバッグ用です。通常は使いません。 オプションのパラメータとして他のオプションを指定することにより、 デバッグオプションが与えられた時点での設定状態を確認できます。 パラメータがオプション名に一致しない場合には、 与えられたパラメータ文字列自身を表示します。

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DEBUG=HOST">
[HOST: "host name"]

<IMG SRC="/%7Enir/cgi-bin/npc.cgi?DEBUG=You+Can+Print+ANY+Message.">
[You Can Print ANY Message.]

4.2.2 制御タグ

制御タグは設定ファイル中で使われ、処理の流れを制御したり、 制限レヴェルを設定したりするのに使われます。 これらのタグ使用の具体例については 設定ファイルの項を参照して下さい

  1. 制御文 (IF, ELSIF, ELSE, ENDIF)
  2. 制御関数 (OPTion, ENVironment, TRUE, FALSE)
  3. 特殊制御文 (ADDRess, BROWSER, HOST, REFerer)
  4. アクセス制限レヴェル設定 (RESTRICTion)
  5. カウンタ値領域開始 (COUNTer)

以下にそれぞれの制御タグの詳細機能を解説します。

4.2.2.1 制御文

制御文は処理の流れを制御します。 基本的な制御文の構造は、

=IF=条件
値
=他のタグ
.               (IFの実行部)
.
=ELSIF=条件
値
=他のタグ
.               (ELSIFの実行部)
.
=ELSE
=他のタグ
.               (ELSEの実行部)
.
=ENDIF

の様になります。 特殊制御文と異なり、 制御文はネスト(入れ子)にも出来ます。

IFで始まり、ENDIFで終わる ひとまとまりの制御文は、一つの制御ブロックとして扱われます。 制御文に続き同じネスト階層にある次の制御文が現われるまでの部分が 各制御文の実行部となります。

IF -- 制御文評価条件

条件が満たされた時に限り、実行部を評価します。

IFは一つの制御ブロックの最初にしか使えません。 制御ブロックの中に再びIFが現われた時は、 もう一段深くネストした制御ブロックの始めと見なされます。

ELSIF -- 制御文再評価条件

同じ制御ブロックに属していて、これ以前に現われたIFELSIFの何れの条件も満たされなかった場合、 このELSIFの条件が評価されます。 そして条件が満たされた時に限り、実行部を評価します。

ELSIFは一つの制御ブロックで何度でもくり返し使えますので、 任意個の条件分岐が記述出来ます。

ELSE -- 制御文代替実行部

同じ制御ブロックに属していて、これ以前に現われたIFELSIFの何れの条件も満たされなかった場合、 実行部を評価します。

ELSEは一つの制御ブロックの最後に1回だけ使えます。

ENDIF -- 制御文終了

一つの制御ブロックの終わりを示します。 ENDIFは値を後置しません。

4.2.2.2 制御関数

制御文の中で条件を指定するのに使われます。

基本的な制御関数の構文は、

=IF=制御関数=引数
値

となります。

OPTion -- オプション値参照

オプション値を評価します。 また、アクセス制限レヴェル設定を 評価する事も出来ます。

引数に評価したいオプション名を取ります。 そのオプションに代入する時の形式で値を指定出来ます。 オプションが文字列の時には、値には正規表現が使えます。

例えば

=IF=OPT=MODE
1

では、オプションMODEの値を 1 と比較し、一致していれば真になります。

オプション値参照制御関数は 常に省略可能です。 つまり、上の例で言えば、

=IF=MODE
1

と書いても等価です。

ENVironment -- 環境変数参照

環境変数を評価します。 引数に評価したい環境変数名を指定します。

例えば以下の様に書けます。

=IF=ENV=HTTP_PRAGMA
no-cache

比較文字列には正規表現が使えます。 この例で言えば、環境変数HTTP_PRAGMAno-cache と言う文字列が含まれている場合真になります。

TRUE -- 真値疑似関数

比較文字列の値にかかわらず真になります。 任意の引数を取る事が出来ます。 強制的に条件実行部を評価させる事が出来るので、 設定ファイルの動作試験の時などに有用です。

例えば

=IF=TRUE=ADDR
123.45.67.89

なら、どのアドレスからのアクセスにかかわらず、 条件が満たされることになります。

FALSE -- 偽値疑似関数

比較文字列の値にかかわらず偽になります。 任意の引数を取る事が出来ます。 強制的に条件実行部を評価させ無い事が出来るので、 設定ファイルの動作試験の時などに有用です。

例えば

=IF=FALSE=OPT=MODE
1

なら、MODEにたとえ 1 がセットされていても、 条件は満たされ無いことになります。

4.2.2.3 特殊制御文

特殊制御文は基本的には制御文環境変数参照制御関数の組と同様の制御をしますが、 制御文とは違い 同種の制御文をネスト(入れ子に)する事は出来ません。 条件は各特殊制御文に最適な書式で比較することが出来ます。

特殊制御文はオプション参照制御関数の引数として 用いることも出来ます。 つまり

=特殊制御文
値

と言う条件文は

=IF=OPT=特殊制御文
値

と言う構文で同じ条件分岐が行なえます。 もちろん制御文との組み合わせでは、 特殊制御文に於けるネスト制限はありません。

また、オプション参照制御関数は 常に省略できますから、

=IF=特殊制御文
値

と書いても等価です。 特殊制御文の単独使用は 旧版との backward compatibility のため残してあるだけですので、 なるべく制御文オプション参照制御関数と 組み合わせて使って下さい。

ADDRess -- アドレスによる動作選択

設定ファイル中で使用します。 WWWブラウザのアドレスによって動作を選択するためのタグです。 REMOTE_ADDR環境変数を 参照します。 アドレスの省略記法には すべてにマッチする "*"と、 範囲にマッチする "[XXX-YYY]"が使えます。

例えば

=IF=ADDR
10.*.*.*
172.[16-31].*.*
192.168.*.*

なら、private address からのアクセスに 一致することになります。

BROWSER -- ブラウザ選択

設定ファイル中で使用します。 WWWブラウザの種類によって動作を選択するためのタグです。 ブラウザが設定するHTTP_USER_AGENT環境変数を 参照します。選択文字列には正規表現が使えます。

例えば

=IF=BROWSER
^Mozilla/.*; MSIE

なら、Microsoft Internet Explore からのアクセスに 一致することになります。

HOST -- ホストによる動作選択

設定ファイル中で使用します。 WWWブラウザのホスト名によって動作を選択するためのタグです。 REMOTE_HOST環境変数を 参照します。 ホスト名は正規表現で記述出来ます。

例えば

=IF=HOST
\.co\.jp$
\.com$

なら、*.co.jp、*.com からのアクセスに一致することになります。 但し、サーヴァによっては DNSによる名前解決をしない所もありますが、 その場合には、REMOTE_HOST環境変数には 生にIPアドレスが入っているため注意が必要です。 また、名前が引けなかったホストからのアクセスの場合も やはり生にIPアドレスが入っています。

REFerer -- 使用ペーヂによる動作選択

設定ファイル中で使用します。 カウンタをリンクしているペーヂによって動作を選択するのに使います。 ブラウザが設定するHTTP_REFERER環境変数を 参照します。 REFererを適切に設定することにより、 Counter Terroristからの アクセスを排除することが出来ます。 REFererには正規表現が使えます。

例えば

=IF=REFERER
^http://www2\.biglobe\.ne\.jp
^http://www2\.meshnet\.or\.jp

なら、Biglobe User WWWサーヴァ1号機にある ペーヂからのリンクに相当します。

4.2.2.4 アクセス制限レヴェル設定

RESTRICTion -- アクセス制限レヴェル設定

設定ファイル中で使用します。 アクセス制限レヴェルを設定します。省略時は 0 です。 レヴェルによって以下の様に動作がかわります。

カウンタが使用禁止になっている時には、カウント値の代わりに 利用禁止メッセーヂが 表示されます。

4.2.2.5 カウンタ値領域開始

COUNTer -- カウンタ値領域開始

設定ファイル中でこのタグが現われた行以降が、 カウント件数記録に使用されます。 このタグ以降はプログラムが読み書きするので、 以降の行を編集する時は元のフォーマットを崩さないように注意して下さい。

カウント値のフォーマットは、

0000012345 http://www2.biglobe.ne.jp/~user/page/

の様になっており、 《10桁の数字、1文字の空白文字、カウンタエントリ、改行》で 構成されています。 改行はサーヴァのOSに自然な改行が使われ、必ず必要です。

4.2.3 タグ索引

以上に示したオプションをアルファベット順に示します。 括弧の中に各オプションの省略時の値を示します。 (Ver.0.82以降に追加されたオプションには (new) マークを付けてあります)

4.3 設定ファイル

設定ファイルのサンプルを以下に示します。

行の最初の空白文字列、最後の空白文字列は無視されます。 空白文字を除いた最初の文字が "#"";"の場合、 あるいは空行の時はコメント行となります。

タグ行は "="に続くタグ名で始めます。 タグ行に続く行はそのタグ名によるオプションの値となります。

コメント指定文字 ("#"";")、 タグ指定文字 ("=")、空白文字を行の先頭に使いたい時は、 """"'" でクォートして下さい。

#!npc.cgi -- ファイル先頭行の「#!npc.cgi」で npc.cgi の設定ファイルか
#            どうかを見分けています。

; npc.cgi v0.82 以降は設定ファイルの制御構文が構造化され、
; 条件分岐が視覚的にも分かりやすくかけるようになりましたので
; なるべく構造化文(=IF)を使って書くようにした方が良いでしょう。

; また、従来の記法では表現できなかった環境変数やオプションの値を
; 使っての条件分岐も可能になっています。

###
# 最初の部分は下の旧形式と同じ条件を構造化文を使って書いています。
#

=WIDTH
5
=PROGRESS
OFF
=INCREMENT
1

=IF=REFERER
  ^$
  =INCREMENT
  0
  =RESTRICTION
  1
=ELSIF=REFERER
  ^http://nocount@www2\.biglobe\.ne\.jp/
  =RESTRICTION
  0
  =INCREMENT
  0
=ELSIF=REFERER
  ^http://www2\.biglobe\.ne\.jp/
  ^http://www2\.meshnet\.or\.jp/
  =RESTRICTION
  0
  =IF=BROWSER
    ^Mozilla/[1-9]
    =PROGRESS
    ON
    =DELAY
    1000,50
  =ENDIF
  =IF=ADDR
    127.0.0.1
    =INCREMENT
    0
  =ELSIF=HOST
    ^meshse[0-9]*\.mesh\.ad\.jp$
    ^host\.domain\.com$
    =INCREMENT
    0
  =ENDIF
=ELSE
  =RESTRICTION
  2
=ENDIF

###
# オプションでモード=1が設定されている場合は、リロードしても
# カウントアップしないようにしています。
# 

=IF=OPT=MODE
  1
  =IF=ENV=HTTP_PRAGMA
    no-cache
    =INCREMENT
    0
  =ENDIF
=ENDIF

=COUNTER
0000000007 test
0000000001 http://www.your.site/your/page/index.html
0000000001 ftp://ftp.your.site/pub/down/conter.gz

以下は旧形式です。使用は推奨しません。

#!npc.cgi -- 設定ファイルの最初の行は「#!npc.cgi」で始まっていること。

### これは旧形式の設定ファイル構文の例です。
### 新形式(sample2.idx)の方が構造化されていて分かりやすいと
### 思いますので、なるべく新形式の方を使って下さい。

;
; このような設定をしたいとします。
;
; # ここは仮想的なマクロで書いてあって設定自体には影響が無いので、
; # 分からなければ気にしないで下さい。(^^;;
;
; WIDTH=5
; PROGRESS=OFF
; INCREMENT=1
; if (REFERER =~ /^$/) {
;     INCREMENT=0
;     RESTRICTION=1
; } elsif (REFERER =~ m#^http://nocount@www2\.biglobe\.ne\.jp/#) {
;     RESTRICTION=0
;     INCREMENT=0
; } elsif ((REFERER =~ m#^http://www2\.biglobe\.ne\.jp/#)
;       || (REFERER =~ m#^http://www2\.meshnet\.or\.jp/#)) {
;     RESTRICTION=0
;     if (BROWSER =~ m#^Mozilla/[1-9]#) {
;         PROGRESS=ON
;         DELAY=1000,50
;     }
;     if (ADDR == 127.0.0.1) {
;         INCREMENT=0
;     }
;     if ((HOST =~ m/^meshse[0-9]*\.mesh\.ad\.jp$/)
;      || (HOST =~ m/^host\.domain\.com$)) {
;         INCREMENT=0
;     }
; } else {
;     RESTRICTION=2
; }
;
; これを設定ファイル書式に直すと以下のようになります。

###
# 最初に全体に適用するオプションを設定しています。
#
=WIDTH
5
=PROGRESS
OFF
=INCREMENT
1

###
# HTTP_REFERER が不正な時にはアクセスを排除します。
#
=RESTRICTION
2

###
# HTTP_REFERER が設定されていない時は念のためカウントアップさせません。
# コマンドラインのオプションも無効にしますので、強制的にカウントアップ
# させることも出来ません。
=REFERER
^$
=INCREMENT
0
=RESTRICTION
1

###
# ペーヂオーナが固定のIPアドレスを持たない場合、自分のペーヂに
# アクセスする時、http://nocount@www2.biglobe.ne.jp/%7Euser/ の様に、
# 最初に nocount を付けることによってカウントアップをしないように
# するために、REFERER をチェックしています。
=REFERER
^http://nocount@www2\.biglobe\.ne\.jp/
=RESTRICTION
0
=INCREMENT
0

###
# このカウンタの使用を許可しているサイトです。
# ここでは、Mesh User's WWW 1 号機からなら制限無しになっています。
=REFERER
^http://www2\.biglobe\.ne\.jp/
^http://www2\.meshnet\.or\.jp/
=RESTRICTION
0

### Netscape 1.0 以降なら PROGRESSIVE モードを使っても平気です。
=BROWSER
^Mozilla/[1-9]
=PROGRESS
ON
### 背景パターン等が転送されたのを見計らってカウントアップを
### 開始するように、1 秒待ってから始めています。
=DELAY
1000,50
### ここから先は、再びどんなブラウザにも適用されます。
=BROWSER
^

### アクセスするサイトのIPアドレスが固定の場合には、そこからアクセス
### した時、動作を変える様にも出来ます。
###
### ここでは管理者がサーヴァマシン自身からループバックアドレスを使って
### アクセスしたり、サーヴィス端末とか特定のホスト(host.domain.com)
### からアクセスした時には、不必要にカウントアップしない様にしています。
=ADDR
127.0.0.1
=INCREMENT
0
=HOST
^meshse[0-9]*\.mesh\.ad\.jp$
^host\.domain\.com$
=INCREMENT
0

###
# COUNTER
#

### この =COUNTER タグの後ろは CGI Program がいぢるので
### 手で変更しない方が無難です。(もちろん、此処に書いてある
### サンプルのカウンタエントリーは削除して構いません)
=COUNTER
0000000007 test
0000000001 http://www.your.site/your/page/index.html
0000000001 ftp://ftp.your.site/pub/down/conter.gz

5. トラブルシューティング

5.1 エラーメッセーヂ

よく出るエラーメッセーヂについて、その意味と原因をリストします。 エラーメッセーヂは数限りなく (^^;; あるので、 すべてについて解説は出来ませんが、ほとんどはメッセーヂから自明だと思います。 もし理由の分からないものがありましたら「うぇぶ会議室」の 「npc.cgiの部屋2」 辺りでお聞き下さい。適宜追加します。

(Cannot Open Index File npc.idx) -- npc.idxファイルの読み込み失敗

省略時の設定ファイルである npc.idxファイルの読み込みに失敗しています。

npc.idxファイルがあるのにこのエラーが出るのは、 npc.idxファイルが省略時の設定ファイルディレクトリに 置かれていないと言うミスがほとんどです。

設定ファイルディレクトリ (INDEX_DIR)は コンパイル時にMakefileで設定されます。 はじめは/usr/local/etc/httpd/indexに設定されています。

(Cannot Open Index File /Bad/Path.idx)(Cannot Open Index File BadName.idx) -- 設定ファイルの読み込み失敗

ユーザ指定の設定ファイルの 読み込みに失敗しています。

設定ファイルのパスが"/"で始まっている時は絶対パスで、 そうでない時は省略時の設定ファイルディレクトリ (INDEX_DIRで設定) からの相対パスで指定することを忘れないで下さい。

特にユーザディレクトリに設定ファイルを置く場合、 http://Server.Name/%7EUserName/FileNameは、 CGIから見ると /UserHomeDirectory/UserName/public_html/FileNameに なるので気を付けて下さい。 また、設定ファイルは ブラウザから参照出来ない場所に 置いた方が安全なので、 /UserHomeDirectory/UserName/index/FileName等を 使うことをお勧めします。

もちろん /UserHomeDirectoryの部分は サーヴァの設定によって変わってきます。 よく使われるのは/home/usersなどです。 また public_htmlも サーヴァによっては別の名前になっている所もあります。 詳しくはサーヴァの管理者にお聞き下さい。

(No Permission To Use This Counter) -- カウンタの利用禁止

カウンタの利用を断わられました。

npc.cgi設定ファイル中で RESTRICTIONタグを使って カウンタの制限レヴェルを設定出来ますが、 使った時の制限レヴェルが 2(= 利用できない)に なっていた事を意味します。

通常、カウンタはどこからでもアクセス出来る様には なっていると思いますが、 どこからでもリンクを張れる様にはなっていないと思います。 リンクを張れるサーヴァは REFERERで設定します。 自分で設定ファイルを書いている場合は、RESTRICTIONや REFERERタグの所をチェックすると良いのではないでしょうか?

(Location Is Not Set) -- カウンタエントリの未設定

カウンタを利用するには、 どのペーヂをアクセスしたか指示するための LOCATION設定が必要ですが、 それが設定されていませんでした。

パラメータとして与えるときは L=... と書きますが、 通常 L= 以下に利用ペーヂをURL書式で書きます。 L=http://www.your.domain/%7Eyour/html/page.html とか、 同じサーヴァ内ならサーヴァ名は省略して L=/%7Eyour/html/page.html とか書けば 他のペーヂとぶつからないので安全です。

もちろん自分の設定ファイルを 利用する時は、この様な書式にこだわらず自由に書くことも出来ます。

(Index File Lock Error) -- 設定ファイルに書き込めない

設定ファイルが 書き込み可能な許可モードになっていません。

特に設定ファイルの所有者が一般ユーザの場合、 サーヴァ権限で書き込むためには、すべての人に書き込める様な 許可モードにしておく必要があるので注意して下さい。

Ver.0.81dまでの旧版では、 書き込み禁止の時にはファイルロックが出来ないことから、 (Index File Lock Error) と言うエラーになっていました。 Ver.0.82以降では、ファイルロックのエラーと ファイル書き込み禁止状態とは別のエラー表示を するようになりました。

5.2 FAQ

此処には npc.cgi の使い方等で 良く質問される項目とその答えをまとめてあります。 此処に書いていない事でマニュアルを読んでも良く分からない事がありましたら、 「うぇぶ会議室」の 「npc.cgiの部屋2」 辺りでお聞き下さい。適宜追加します。

異常なカウントアップ

Q. ペーヂを通る度にカウントアップしてしまうんですけど?

A. Server Push によるアニメーションモードを 使っていませんか?

アニメーションモードに Server Push を使っていると、 大抵のブラウザはカウンタ画像のキャッシュをしないので、 カウンタを使用しているペーヂを通る度にカウンタ画像を読み直すため、 毎回カウントアップするようになります。 アニメーションモードを GIF89a モードにすれば ブラウザが画像をキャッシュするようになりますので、 異常なカウントアップは防げます。

Ver.0.81d までのヴァージョンでは省略時のアニメーションモードが Server Push であったため、 知らずにこのモードを使っている可能性があります。 Ver.0.82 からはアニメーションモードの省略時の選択は GIF89aアニメモードになりました。

リロードでのカウントアップ排除

Q. リロードした時にはカウントアップさせたくないんですけど?

A. 設定ファイルに条件を書けば可能です。(Ver.0.82以降)

設定ファイルに

=IF=ENV=HTTP_PRAGMA
  no-cache
  =INCREMENT
  0
=ENDIF

と言う条件を加えて下さい。

ブラウザがリロードをする時には、 普通 HTTP のリクエストヘッダとして、 Pragma: no-cache と言うものを付けます。 この Pragma: と言うヘッダは 環境変数HTTP_PRAGMAに現れますので、 それをチェックして no-cache が入っている時には カウントアップさせないようにします。

カウンタ値のリセット

Q. 使用を始めてからカウンタ値をリセットしたくなったのですが?

A. 残念ながら、現在のヴァージョンではリセットの手段は用意されていません。 直接設定ファイルの該当するカウンタエントリーを書き換えて下さい。

設定ファイルを書き換える時、 カウンタ値の部分の桁数を変えたり 改行記号を他のものに変えたりすると誤動作します。 カウンタエントリの書式を 崩さないようにご注意下さい。

カウンタ値の初期値は、直接設定ファイルを編集しなくても 指定できます。


6. 付録

6.1 著作権

当プログラムはフリーソフトとします。 配布アーカイヴに含まれるもののうち、 当プログラムに属するすべてのソースファイル、 及び、付属文書の著作権は作者が保持します。 作者が著作権を持つ部分について、 修正/再利用/再配布することを認めます。 但し、修正したものを再配布する場合は オリヂナルとの相違点を明確にして下さい。 また、利用に関しては無制限にこれを認めます。 上記許可事項に関して個別に作者に許可を求めることは不要です。

6.2 免責

当プログラムの配布にあたっては、その有用性、安全性等に関する いかなる保証も行ないません。当プログラムの使用に際して生じた いかなる損害に対しても、作者は責任を負いません。 また、当プログラムに明らかな不具合、仕様上の不備等が見つかった 場合に於いても、作者はそれを修正する責を負いません。

6.3 作成履歴

Ver0.83 -- 1997年12月12日
Unisysの持つLZW関係特許への 侵害を避けるため、 生成する画像を無圧縮GIFモードで 出力する事とした。 出力データ量を少なくするため、 GIFアニメモードでは更新される桁のみ出力する様にした。 このためGIFアニメモードを使っている限り、 転送バイトは旧版とさして変わら無い量に抑えられた。
Ver0.82 -- 1997年11月11日
設定ファイルの文法を見直して、 構造化文が使えるようにした。 また、カウンタに渡された環境変数を 分岐条件として使えるようになったので、 Reload時のカウントアップ抑制などの 処理も行なえるようになった。 著作権表示をすこし改訂した。
Ver0.81d -- 1996年10月29日
Locationを設定ファイルに直書きした時の処理に バグがあるのが見つかってしまった。 (^^;; 設定ファイルのサンプルを少し書き換えて 分かりやすくしたつもり。
Ver0.81c -- 1996年8月17日
利用可能なプラットホームを増やした。 BSD系のUnixと、Win32(WinNT、Win95) に正式対応した。 CERN系のサーヴァなど、PATH_INFOの扱いが、 NCSA-HTTPdと違う物にも対応した。 新たな機能追加は無い。
Ver0.80a -- 1996年6月11日
久々のヴァージョンアップ。 MeshNet で公開して以来、繰り返したずねられてきた、 「戻ってきた時にカウントアップしないようにするには、 どうやったら良いのですか?」と言う問いにやっと答えられるようになった。 もちろん、その答えは「GIF89aのアニメーションモードを使う」です。 (^^) その他、前景色、背景色、透明色の設定、数字の選択、 初期値の設定に対応した。
Ver0.74a -- 1996年3月12日
設定されている環境変数を表示出来る様にした。 文字列の後ろの空白をクリップしている所で、 恥ずかしい大バグが見つかってしまった。 (*^^*) バグ取りついでにクォートが利くようにした。 コンパイル時の設定項目をMakefile中に集めて 分かり易くした。
Ver0.73 -- 1996年3月11日
usleep()関数を持っていないOSでも使える様に、 Delayをselect()を使って行なう事にした。
Ver0.72 -- 1996年3月4日
npc.cgiのホームペーヂをMeshNetに変えたら、 サーヴァが今まで使っていた NCSA-HTTPd から Netscape-Commerceになってしまって、 いろいろとバグが顕在化してしまった。 (^^;; うーむ、久しぶりに手を入れたな。
Ver0.71 -- 1995年11月6日
npc.cgiでRESTRICTIONレヴェルが 1 でも、 NUMBERやRANDOMオプションの様に数を明示的に指定するものは 使えることにした。
Ver0.70 -- 1995年11月2日
npc.cgiを使ったペーヂを Mosaic など Server Push を 処理できないブラウザで見た時に、単なる1枚画の GIF を表示出来る様に、 HTTP_USER_AGENT環境変数を読んで動作を変えられるようにした。 また、HTTP_REFERER環境変数が設定されていない時の動作も、 単にアクセス制限するのではなく、ユーザが選択できるようにした。 もう一つ、DELAYの設定を出来る様にしたので、 ペーヂが書き上がったのを見計らって、カウントアップさせる、 などと言うことが出来る様になった。 設定ファイルの形式を大幅に変えた。
Ver0.62 -- 1995年10月27日
ユーザが自分の設定ファイルを作る時に、 システムエリアに書かなくて良いようにするため、 PATH_INFO (実際にはPATH_TRANSLATED)環境変数を見て、 あれば設定ファイルとした。
Ver0.61 -- 1995年10月26日
RANDOM表示モードでもLOCATIONが必要になっていたバグを修正。
Ver0.60 -- 1995年10月24日
βヴァージョン。取りあえずCGIとして動くようになったので、公開した。 まだ、マニュアルが全然無い。 (^^;;;
Ver0.1〜Ver0.5
αヴァージョン。単独実行ファイル形式。非公開。

6.4 これからの予定


7. 索引

【 A 】
【 B 】
【 C 】
【 D 】
【 E 】
【 F 】
【 G 】
【 H 】
【 I 】
【 L 】
【 M 】
【 N 】
【 O 】
【 P 】
【 Q 】
【 R 】
【 S 】
【 T 】
【 U 】
【 V 】
【 W 】
【ア行】
【カ行】
【サ行】
【タ行】
【ナ行】
【ハ行】
【マ行】
【ラ行】

・ 環境変数試験ペーヂに行く
・ にあのホームペーヂに戻る
nir@mvg.biglobe.ne.jp
$Date: 1999/01/11 12:49:36 $